Python Учебное пособие по Pandas: DataFrame, диапазон дат и его использование.

⚡ Умное резюме

Pandas — это библиотека с открытым исходным кодом. Python Библиотека для обработки табличных данных. Она предоставляет структуры Series и DataFrame, диапазоны дат, вспомогательные функции проверки, а также операции среза, удаления, объединения, сортировки и переименования, продемонстрированные в этом пошаговом руководстве.

  • 🔘 Построено на NumPy: Pandas требует наличия NumPy, который предоставляет массивы, лежащие в основе каждого объекта Series и DataFrame.
  • ☑️ Две структуры: В классе Series хранится одно помеченное измерение; в классе DataFrame хранятся строки и столбцы смешанных типов.
  • Диапазоны дат: Функция pd.date_range() создает индекс на основе начальной даты, количества периодов и частоты.
  • 🧪 Сначала осмотрите: Функции head(), tail() и describe() позволяют определить форму, разброс и процентили до проведения какого-либо анализа.
  • 🇧🇷 Нарезайте с точностью: Использование квадратных скобок позволяет выбирать столбцы, loc — по метке, а iloc — по позиции.
  • ⚠️ Примечание к версии: Начиная с версии Pandas 2.2, псевдоним частоты M устарел; в текущих релизах ожидается ME.

Python Учебное пособие по Pandas: DataFrame, диапазон дат и использование Pandas.

Что такое Pandas в Python?

Панды Это библиотека с открытым исходным кодом, которая позволяет выполнять обработку и анализ данных. PythonОн охватывает как числовые таблицы, так и временные ряды. Он предоставляет простой способ создания, обработки и анализа данных и построен на основе... NumPyТаким образом, для работы Pandas необходимо наличие библиотеки NumPy.

Зачем использовать Панды?

Ученые, работающие с данными, используют Pandas в Python для получения следующих преимуществ:

  • Легко обрабатывает недостающие данные
  • В нем используется класс Series для одномерных данных и DataFrame для многомерных данных.
  • Он обеспечивает эффективный способ разделения данных
  • Он обеспечивает гибкий способ объединения, конкатенации или изменения формы данных.
  • Он включает в себя мощный набор инструментов для работы с временными рядами.

Вкратце, Pandas предоставляет мощные и простые в использовании структуры данных, а также средства для быстрой работы с ними, поэтому он является основой большинства библиотек. Python анализ данных Работа.

Как установить Pandas

Pandas поставляется вместе с Anaconda и большинством управляемых сервисов Notebook, поэтому обычно он уже установлен. Если импорт не удается, одна из приведенных ниже команд добавит его. Встроенная среда Как установить ТензорФлоу Также содержит Pandas.

  • пип: pip install pandas
  • Анаконда: conda install -c anaconda pandas
  • Внутри Jupyter ноутбук Мобильный телефон:
import sys
!conda install --yes --prefix {sys.prefix} pandas

Что такое DataFrame Pandas?

Pandas DataFrame — это двумерная структура данных с метками, столбцы которой могут содержать данные разных типов. Это стандартный способ хранения данных в табличном формате: строки содержат наблюдения, а столбцы — названия информации. Например, цена может быть названием столбца, а 2, 3, 4 могут быть значениями цен.

Фреймы данных хорошо известны статистикам и другим специалистам по работе с данными. На рисунке ниже показана такая форма — помеченный индекс строки сбоку и именованные столбцы сверху.

Макет DataFrame в Pandas с помеченным индексом строки и именованными столбцами.

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

Структура данных Series — это одномерная структура. Она может содержать данные любого типа, например, целое число, число с плавающей запятой или строку, и полезна, когда необходимо выполнить вычисления или вернуть одномерный массив. По определению, структура Series не может иметь несколько столбцов; в этом случае используйте структуру DataFrame.

Конструктор Pandas Series принимает следующие параметры:

  • Данные: может быть списком, словарем или скалярным значением.
pd.Series([1., 2., 3.])
0    1.0
1    2.0
2    3.0
dtype: float64

Вы можете добавить индекс с помощью index. Он присваивает имена строкам, и его длина должна равняться длине столбца.

pd.Series([1., 2., 3.], index=['a', 'b', 'c'])

Ниже вы создаете объект Pandas Series с пропущенным значением в третьей строке. Пропущенные значения в Python показаны как NaN и np.nan NumPy создает его искусственно.

pd.Series([1,2,np.nan])

Результат

0    1.0
1    2.0
2    NaN
dtype: float64

Создать фрейм данных Pandas

Вы можете преобразовать массив NumPy в DataFrame с помощью pd.DataFrame()Также возможен и обратный вариант: чтобы преобразовать DataFrame обратно в массив, используйте np.array() или df.to_numpy(), что и рекомендуется в текущей документации Pandas.

## Numpy to pandas
import numpy as np
h = [[1,2],[3,4]] 
df_h = pd.DataFrame(h)
print('Data Frame:', df_h)

## Pandas to numpy
df_h_n = np.array(df_h)
print('Numpy array:', df_h_n)
Data Frame:    0  1
0  1  2
1  3  4
Numpy array: [[1 2]
 [3 4]]

Словарь отлично подходит в качестве входных данных для pd.DataFrame().

dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
Возраст Имя
0 30 John
1 40 Smith

Данные о диапазоне панд

Библиотека Pandas предоставляет удобный API для создания диапазона дат, который становится индексом временного ряда. Вызов имеет следующий вид:

pd.date_range(start, periods, freq):

  • Первый параметр — дата начала.
  • Второй параметр — количество периодов (необязательно, если указана дата окончания).
  • Последний параметр — частота: день D, месяц M и год Y
## Create date
# Days
dates_d = pd.date_range('20300101', periods=6, freq='D')
print('Day:', dates_d)

Результат

Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months
dates_m = pd.date_range('20300101', periods=6, freq='M')
print('Month:', dates_m)

Результат

Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')

Примечание к версии: псевдоним месяца M Приведенный выше код устарел начиная с Pandas 2.2 и удален в Pandas 3.0. В текущих версиях он проходит проверку. freq='ME' на конец месяца; результирующий индекс идентичен.

Проверка данных

Проверить начало или конец набора данных можно с помощью head() or tail() Вызов осуществляется на объекте DataFrame, как показано в приведенном ниже примере с Pandas.

Шаг 1) Создайте случайную последовательность с помощью NumPy. Последовательность будет иметь 4 столбца и 6 строк.

random = np.random.randn(6,4)

Шаг 2) Затем вы создаёте DataFrame с помощью библиотеки Pandas.

Используйте dates_m в качестве индекса, поэтому каждой строке присваивается имя, соответствующее дате, а 4 столбца именуются следующим образом: columns аргумент.

# Create data with date
df = pd.DataFrame(random,
                  index=dates_m,
                  columns=list('ABCD'))

Так как np.random.randn() При запуске без начального значения генератора случайных чисел ваши результаты будут отличаться от приведенных здесь. Звонок np.random.seed(0) Во-первых, если вы хотите воспроизвести фиксированный набор.

Шаг 3) Используя функцию head

df.head(3)
A B C D
2030-01-31 1.139433 1.318510 -0.181334 1.615822
2030-02-28 -0.081995 -0.063582 0.857751 -0.527374
2030-03-31 -0.519179 0.080984 -1.454334 1.314947

Шаг 4) Используя функцию tail

df.tail(3)
A B C D
2030-04-30 -0.685448 -0.011736 0.622172 0.104993
2030-05-31 -0.935888 -0.731787 -0.558729 0.768774
2030-06-30 1.096981 0.949180 -0.196901 -0.471556

Шаг 5) Отличный способ получить представление о данных — это describe()В нем отображаются количество, среднее значение, стандартное отклонение, минимальное и максимальное значения, а также процентили набора данных.

df.describe()
A B C D
считать 6.000000 6.000000 6.000000 6.000000
значить 0.002317 0.256928 -0.151896 0.467601
станд 0.908145 0.746939 0.834664 0.908910
мин -0.935888 -0.731787 -1.454334 -0.527374
25% -0.643880 -0.050621 -0.468272 -0.327419
50% -0.300587 0.034624 -0.189118 0.436883
75% 0.802237 0.732131 0.421296 1.178404
Макс 1.139433 1.318510 0.857751 1.615822

Срез данных

Функция среза извлекает подмножество строк или столбцов из DataFrame. Вы можете использовать имя столбца для примера.tracв одном столбце, как показано в приведенном ниже примере с Pandas.

## Slice
### Using name
df['A']

2030-01-31   -0.168655
2030-02-28    0.689585
2030-03-31    0.767534
2030-04-30    0.557299
2030-05-31   -1.547836
2030-06-30    0.511551
Freq: M, Name: A, dtype: float64

Для выбора нескольких столбцов необходима двойная скобка. [[..,..]]Первая пара указывает, какие столбцы нужно выбрать; вторая пара указывает, какие столбцы следует вернуть.

df[['A', 'B']]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Строки можно отфильтровать с помощью двоеточия. Приведённый ниже код возвращает первые три строки.

### using a slice for row
df[0:3]
A B C D
2030-01-31 -0.168655 0.587590 0.572301 -0.031827
2030-02-28 0.689585 0.998266 1.164690 0.475975
2030-03-31 0.767534 -0.940617 0.227255 -0.341532

loc Метод доступа выбирает столбцы по имени. Как обычно, значение до запятой обозначает строки, а значение после нее — столбцы; для выбора более чем одного столбца необходимы скобки.

## Multi col
df.loc[:,['A','B']]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Существует еще один способ выбора нескольких строк и столбцов. iloc[] Вместо имен столбцов используются целочисленные позиции, поэтому приведенный ниже код возвращает тот же DataFrame, что и выше.

df.iloc[:, :2]
A B
2030-01-31 -0.168655 0.587590
2030-02-28 0.689585 0.998266
2030-03-31 0.767534 -0.940617
2030-04-30 0.557299 0.507350
2030-05-31 -1.547836 1.276558
2030-06-30 0.511551 1.572085

Оставить столбец

Вы можете удалять столбцы с помощью df.drop(), передавая имена в columns аргумент.

df.drop(columns=['A', 'C'])
B D
2030-01-31 0.587590 -0.031827
2030-02-28 0.998266 0.475975
2030-03-31 -0.940617 -0.341532
2030-04-30 0.507350 -0.296035
2030-05-31 1.276558 0.523017
2030-06-30 1.572085 -0.594772

конкатенация

Вы можете объединить два DataFrame с помощью pd.concat()Сначала создайте два фрейма.

import numpy as np
df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'],
                     'Age': ['25', '30', '50']},
                    index=[0, 1, 2])
df2 = pd.DataFrame({'name': ['Adam', 'Smith' ],
                     'Age': ['26', '11']},
                    index=[3, 4])  

Затем объедините их.

df_concat = pd.concat([df1,df2]) 
df_concat
Возраст имя
0 25 John
1 30 Smith
2 50 Paul
3 26 Адам
4 11 Smith

Удалить дубликаты

Когда набор данных содержит повторяющуюся информацию, drop_duplicates() Это простой способ исключить повторяющиеся строки. df_concat содержит дублирующееся наблюдение: Smith встречается дважды в name колонка.

df_concat.drop_duplicates('name')
Возраст имя
0 25 John
1 30 Smith
2 50 Paul
3 26 Адам

Сортировка значений

Вы можете отсортировать рамку с помощью sort_values(), Обратите внимание, что Age Здесь данные были созданы в текстовом формате, поэтому строки сортируются в строковом порядке.

df_concat.sort_values('Age')
Возраст имя
4 11 Smith
0 25 John
3 26 Адам
1 30 Smith
2 50 Paul

Переименовать столбцы

Используйте rename() Чтобы переименовать столбец в Pandas. В каждой паре первое значение — это текущее имя столбца, а второе — новое.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Возраст_чел. Фамилия
0 25 John
1 30 Smith
2 50 Paul
3 26 Адам
4 11 Smith

Краткий справочник по методам Pandas

В этой таблице каждому распространенному заданию соответствует метод Pandas, который его выполняет.

Сложность задачи Способ доставки
импортировать данные read_csv
создать серию Серия
Создать фрейм данных DataFrame
Создать диапазон дат диапазон дат
вернуть голову
возвратный хвост хвост
Описывать описывать
фрагмент, используя имя имя_данных['имя_столбца']
Разрезать по строкам имя_данных[0:5]

Часто задаваемые вопросы (FAQ)

Позвонить pd.read_csv() с тропой или URLДобавьте имена для столбцов меток, используйте sep для другого разделителя и usecols, чтобы оставить только необходимые столбцы.

Функция isnull() помечает их как пустые, функция dropna() удаляет затронутые строки или столбцы, а функция fillna() подставляет константу или статистику, например, среднее значение столбца. Отсутствующие записи выводятся как NaN.

Функция groupby() разбивает строки на группы по ключевому столбцу, применяет к каждой группе агрегацию, такую ​​как count, sum или mean, а затем объединяет результаты в новый фрейм.

Создайте булеву маску и передайте её в скобках, например, df[df.Age == 30]. Объедините маски с операторами амперсанда и вертикальной черты, заключите их в скобки.ping Каждое сравнение указано в скобках.

Метод pd.merge() сопоставляет строки по ключевому столбцу так же, как и другой метод. SQL Функция join выполняет операцию, в зависимости от того, установлен ли параметр inner, left, right или outer. Функция concat() объединяет кадры в стек вместо сопоставления ключей.

Функция `df.to_csv('out.csv', index=False)` записывает файл с запятыми, а `df.to_excel('out.xlsx')` — рабочий лист. (Удалить)ping Индекс позволяет избежать появления безымянного первого столбца при следующем прочтении.

Искусственный интеллект создает профиль нового кадра, предлагает подходящие вызовы функций describe, groupby и plot, а также помечает столбцы с нестандартными типами данных или большим количеством значений NULL. Каждое предложение проверяется на соответствие исходным данным.

Да. Второй пилот GitHub преобразует простой комментарий в работающий код Pandas. Jupyter клетка. RevПеред тем как доверять результату, проверьте типы данных и количество строк.

Подведем итог этой публикации следующим образом: