stringtranslate.com

панды (программное обеспечение)

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]

Смотрите также

Рекомендации

  1. ^ «Выпуск Pandas 2.2.0» . 20 января 2024 г.
  2. ^ «Лицензия – Обзор пакета – Документация pandas 1.0.0» . панды . 28 января 2020 г. Проверено 30 января 2020 г.
  3. ^ Уэс МакКинни (2011). «Pandas: базовая библиотека Python для анализа данных и статистики» (PDF) . Проверено 2 августа 2018 г.
  4. ^ abcdefghijklmnop МакКинни, Уэс (2014). Python для анализа данных (первое изд.). О'Рейли. ISBN 978-1-449-31979-3.
  5. ^ Копф, Дэн. «Познакомьтесь с человеком, создавшим самый важный инструмент в области науки о данных». Кварц . Проверено 17 ноября 2020 г.
  6. ^ «NumFOCUS - панды: проект, финансируемый с финансовой точки зрения» . NumFOCUS . Проверено 3 апреля 2018 г.
  7. ^ «Инструменты ввода-вывода (текст, CSV, HDF5,…) — документация по pandas 1.4.1» .
  8. ^ abcdefgh ВандерПлас, Джейк (2016). Справочник по Python Data Science: основные инструменты для работы с данными (первое издание). О'Рейли. ISBN 978-1-491-91205-8.
  9. МакКинни, Уэс (21 сентября 2017 г.). «Apache Arrow и «10 вещей, которые я ненавижу в пандах»». wesmckinney.com . Проверено 21 декабря 2023 г.

дальнейшее чтение