Pandas (стилизовано под pandas ) — программная библиотека , написанная для языка программирования Python для манипулирования и анализа данных . В частности, он предлагает структуры данных и операции для манипулирования числовыми таблицами и временными рядами . Это бесплатное программное обеспечение , распространяемое по трехпунктной лицензии BSD . [2] Название происходит от термина « pan el data », эконометрического термина для наборов данных , которые включают наблюдения за несколько периодов времени для одних и тех же людей, [3] , а также от игры на фразе «Анализ данных Python» . ". [4] : 5 Уэс МакКинни начал создавать то, что впоследствии стало Pandas, в AQR Capital , когда он работал там исследователем с 2007 по 2010 год. [5]
Разработка Pandas привнесла в Python множество сопоставимых функций работы с DataFrames, которые были установлены в языке программирования R. Библиотека построена на основе другой библиотеки NumPy .
Разработчик Уэс МакКинни начал работать над Pandas в 2008 году, когда работал в AQR Capital Management , из-за потребности в высокопроизводительном и гибком инструменте для количественного анализа финансовых данных. Прежде чем покинуть AQR, он смог убедить руководство разрешить ему открыть исходный код библиотеки.
Другой сотрудник AQR, Чан Ше, присоединился к усилиям в 2012 году в качестве второго крупного сотрудника библиотеки.
В 2015 году Pandas стал финансово спонсируемым проектом NumFOCUS, некоммерческой благотворительной организации 501(c)(3) в США. [6]
Pandas построен на структурах данных, называемых Series и DataFrames . Данные для этих коллекций можно импортировать из различных форматов файлов, таких как значения, разделенные запятыми , JSON , Parquet , таблицы или запросы базы данных SQL , а также Microsoft Excel . [7]
Серия — это одномерная структура данных, построенная на основе массива NumPy . [8] : 97 В отличие от NumPy, каждая точка данных имеет связанную метку. Коллекция этих меток называется индексом. [4] : Серии 112 можно использовать арифметически, как в операторе series_3 = series_1 + series_2
: это выравнивает точки данных с соответствующими значениями индекса в series_1
и series_2
, а затем суммирует их для получения новых значений в series_3
. [4] : 114 DataFrame — это двумерная структура данных, состоящая из строк и столбцов, похожая на электронную таблицу и аналогичная словарю Python , сопоставляющему имена столбцов (ключи) с сериями (значениями), причем каждая серия имеет общий индекс. [4] : 115 DataFrames могут быть объединены или «объединены» по столбцам или индексам аналогично соединениям в SQL . [4] : 177–182 Pandas реализует подмножество реляционной алгебры и поддерживает соединения «один к одному», «многие к одному» и «многие ко многим». [8] : 147–148 Pandas также поддерживает менее распространенные Panel и Panel4D , которые представляют собой трехмерные и четырехмерные структуры данных соответственно. [8] : 141
Пользователи могут преобразовывать или суммировать данные, применяя произвольные функции . [4] : 132 Поскольку Pandas построен на основе NumPy, все функции NumPy также работают с сериями и DataFrames. [8] : 115 Pandas также включает встроенные операции для арифметики, манипуляций со строками и сводной статистики, такой как среднее значение , медиана и стандартное отклонение . [4] : 139, 211 Эти встроенные функции предназначены для обработки недостающих данных, обычно представленных значением с плавающей запятой NaN . [4] : 142–143.
Подмножества данных можно выбирать по имени столбца, индексу или логическим выражениям . Например, df[df['col1'] > 5]
вернет все строки в DataFrame df
, для которых значение столбца col1
превышает 5. [4] : 126–128 Данные могут быть сгруппированы по значению столбца, как в df['col1'].groupby(df['col2'])
, или по функции, которая применяется к индексу. . Например, df.groupby(lambda i: i % 2)
данные группируются по четности индекса. [4] : 253–259.
Pandas включает поддержку временных рядов , например, возможность интерполяции значений [4] : 316–317 и фильтрации с использованием диапазона временных меток (например, data['1/1/2023':'2/2/2023']
возвращает все даты между 1 января и 2 февраля). [4] : 295 Pandas представляет отсутствующие данные временных рядов, используя специальный объект NaT (не временная метка) вместо значения NaN, которое он использует в другом месте. [4] : 292
По умолчанию индекс Pandas представляет собой серию целых чисел, возрастающих от 0, аналогично индексам массивов Python . Однако индексы могут использовать любой тип данных NumPy, включая плавающую запятую, метки времени или строки. [4] : 112
Синтаксис Pandas для сопоставления значений индекса с соответствующими данными аналогичен синтаксису, который Python использует для сопоставления ключей словаря со значениями. Например, если s
это серия, s['a']
вернет точку данных по индексу a
. В отличие от ключей словаря, уникальность значений индекса не гарантируется. Если серия использует значение индекса a
для нескольких точек данных, s['a']
вместо этого будет возвращена новая серия, содержащая все совпадающие значения. [4] : 136 Имена столбцов DataFrame хранятся и реализуются идентично индексу. Таким образом, DataFrame можно рассматривать как имеющий два индекса: один на основе столбца и один на основе строки. Поскольку имена столбцов хранятся в виде индекса, они не обязательно должны быть уникальными. [8] : 103–105.
Если data
это серия, то data['a']
возвращаются все значения со значением индекса a
. Однако если data
это DataFrame, то data['a']
возвращаются все значения в столбцах с именем a
. Чтобы избежать этой двусмысленности, Pandas поддерживает синтаксис data.loc['a']
как альтернативный способ фильтрации с использованием индекса. Pandas также поддерживает синтаксис data.iloc[n]
, который всегда принимает целое число n и возвращает n-е значение, считая с 0. Это позволяет пользователю действовать так, как будто индекс представляет собой последовательность целых чисел, подобную массиву, независимо от того, как он на самом деле определен. [8] : 110–113
Pandas поддерживает иерархические индексы с несколькими значениями для каждой точки данных. Индекс с такой структурой, называемый «MultiIndex», позволяет одному DataFrame представлять несколько измерений, подобно сводной таблице в Microsoft Excel . [4] : 147–148 Каждому уровню MultiIndex может быть присвоено уникальное имя. [8] : 133 На практике данные с более чем двумя измерениями часто представляются с использованием DataFrames с иерархическими индексами вместо многомерных структур данных Panel и Panel4D [8] : 128
Pandas критиковали за неэффективность. Pandas может потребоваться в 5–10 раз больше памяти, чем размер базовых данных, и весь набор данных должен быть загружен в ОЗУ . Библиотека не оптимизирует планы запросов и не поддерживает параллельные вычисления на нескольких ядрах . Уэс МакКинни, создатель Pandas, рекомендовал Apache Arrow в качестве альтернативы для решения этих проблем с производительностью и других ограничений. [9]