Серия Pandas: легкое вступление

Pandas - это библиотека с открытым исходным кодом под лицензией BSD, предоставляющая высокопроизводительные, простые в использовании структуры данных и инструменты анализа данных для языка программирования Python.

Структуры данных, предоставляемые Pandas, бывают двух разных типов.

  1. Фрейм данных Pandas &
  2. Серия "Панды"

В этом посте мы рассмотрим серию панд.

Примечание: я настоятельно рекомендую прочитать мою предыдущую публикацию в Pandas DataFrame, прежде чем продолжить эту публикацию, чтобы лучше понять серию Pandas

Что такое серия?

Технически Pandas Series представляет собой одномерный массив с метками, способный хранить данные любого типа.

С точки зрения непрофессионала, Pandas Series - это не что иное, как столбец на листе Excel. Как показано на рисунке ниже, столбцы с именем, возрастом и названием представляют серию

Итак, с точки зрения структуры данных Pandas, серия A представляет собой отдельный столбец в памяти, который либо независим, либо принадлежит фрейму данных Pandas.

Примечание. Серия может иметь собственное независимое существование, не являясь частью DataFrame.

Как создать серию?

Серия Pandas может быть создана из списка Python или массива NumPy. Следует помнить, что в отличие от списков Python, серия всегда будет содержать данные одного и того же типа. Это делает массив NumPy лучшим кандидатом для создания серии панд.

Вот как мы можем использовать оба вышеперечисленного для создания серии Pandas

series_list = pd.Series([1,2,3,4,5,6])
series_np = pd.Series(np.array([10,20,30,40,50,60]))

и вот как они будут выглядеть

Так же, как при создании Pandas DataFrame, серия также генерирует по умолчанию номера индексов строк, которые представляют собой последовательность инкрементальных чисел, начинающихся с 0.

Как вы уже догадались, при создании серии можно использовать собственные значения индекса строки. Нам просто нужно передать параметры индекса, которые принимают список того же типа или массив NumPy.

В приведенном ниже примере используется последовательность, созданная NumPy.

series_index = pd.Series(
      np.array([10,20,30,40,50,60]), 
      index=np.arange(0,12,2) 
)

Пример ниже использования строк в качестве индекса строки

series_index = pd.Series(
        np.array([10,20,30,40,50,60]), 
        index=['a', 'b', 'c', 'd', 'e', 'f' ] 
)

Мы можем использовать индекс строки ряда как

series_index.index

Что возвращает массив NumPy независимо от того, передали ли мы список или массив NumPy при создании серии.

Создание серии Pandas из словаря Python

Как мы видели во время создания Pandas DataFrame, было очень легко создать DataFrame из словарей Python, поскольку ключи сопоставляются с именами столбцов, а значения соответствуют списку значений столбца.

Итак, как это отображается при создании серии Pandas?

Если мы создаем серию из словаря Python, ключ становится индексом строки, а значение становится значением в этом индексе строки.

В качестве примера давайте посмотрим, что происходит с очень простым словарем с одной парой ключ-значение.

t_dict = {'a' : 1, 'b': 2, 'c':3}
# Creating a Series out of above dict
series_dict = pd.Series(t_dict)

А вот как выглядит результат

Ничего не изменится, если значения в словаре содержат список элементов. Элементы списка остаются частью индекса одной строки, как в приведенном ниже случае.

t_dict = {'a' : [1,2,3], 'b': [4,5], 'c':6, 'd': "Hello World"}
# Creating a Series out of above dict
series_dict = pd.Series(t_dict)

Получение серии из фрейма данных Pandas

Хотя Pandas Series чрезвычайно полезен сам по себе для анализа данных и предоставляет множество полезных вспомогательных функций, тем не менее, в большинстве случаев аналитические требования вынуждают нас использовать DataFrame и Series вместе.

Давайте сначала создадим DataFrame Pandas, как мы создали в Здесь

my_dict = { 
'name' : ["a", "b", "c", "d", "e"],
'age' : [10,20, 30, 40, 50],
'designation': ["CEO", "VP", "SVP", "AM", "DEV"]
}
df = pd.DataFrame( my_dict, 
index = [
"First -> ",
"Second -> ", 
"Third -> ", 
"Fourth -> ", 
"Fifth -> "])

И вот как должен выглядеть получившийся DataFrame

DataFrame предоставляет два способа доступа к столбцу, т. Е. Используя синтаксис словаря df['column_name'] или df.column_name. Каждый раз, когда мы используем это представление для получения столбца, мы получаем серию панд.

В приведенном выше примере мы можем получить серию (то есть один столбец), просто обратившись к столбцу

series_name = df.name
series_age = df.age
series_designation = df.designation

Получение серии путем итерации по столбцам DataFrame

Что делать, если мы не знаем названия столбцов?

Pandas DataFrame является итерируемым, и мы можем перебирать отдельные столбцы, чтобы получить серию

series_col = []
for col_name in df.columns:
    series_col.append(df[col_name])

Создание DataFrame с использованием серии (отдельно или в комбинации)

DataFrame Pandas - это не что иное, как набор из нескольких серий (1+). Мы можем сгенерировать DataFrame, используя одну серию или комбинируя несколько серий.

Например, давайте сгенерируем DataFrame из комбинации series_name и series_age

df_from_series = pd.DataFrame([series_name, series_age])

и, к вашему удивлению, итоговый DataFrame должен выглядеть

Да, индексы строк в Series становятся столбцами, а столбцы - значением индекса строки. Вы можете рассматривать это как транспонирование матрицы. Это верно, даже если мы предоставим одну серию для создания DataFrame.

df_from_series_single = pd.DataFrame([series_name])

Однако этого не происходит, когда мы удаляем нотацию списка / массива из серии. Например

df_from_series_single = pd.DataFrame(series_name)

Приведет к сохранению имени столбца серии и индексов строк

ПРИМЕЧАНИЕ. К сожалению, это ограничено только одной серией, поскольку DataFrame API не принимает более одного аргумента для серии.

Поведение при создании DataFrame с Python Dict

Такое же поведение будет наблюдаться, когда мы передаем словари Python в качестве массивов для создания DataFrame. Давайте посмотрим на t_dict = {'a': 1, ‘b’: 2, ‘c’:3}, который мы создали ранее

ds = pd.DataFrame([t_dict])

и результирующий DataFrame должен выглядеть как

Где ключи представлены как столбцы, которые иначе были бы представлены как индекс строки, если бы мы создали серию

Мы даже можем объединить несколько t_dict для создания DataFrame

ds = pd.DataFrame([t_dict, t_dict ], index=[1,2])

Вспомогательные функции серии

Как и pandas DataFrame, Series также имеет несколько наборов вспомогательных функций для анализа данных.

Обратите внимание, что все вспомогательные функции столбцов в Pandas DataFrame будут работать с Pandas Series. Некоторые из примеров

#Getting the mean of a Series
series_age.mean()
# Getting the size of the Series
series_age.size
# Getting all unique items in a series
series_designation.unique()
# Getting a python list out of a Series
series_name.tolist()

Итерация по серии

Как и во многих других структурах данных в Python, можно выполнять итерацию по сериям, используя простой цикл for как

for value in series_name:
    print(value)

Мы также можем перебирать строку серии, индексированную как

for row_index in series_name.keys():
    print(row_index)

Это все о базовом использовании Pandas Series.

Спасибо за прочтение…!!!

Дакша