Python Підручник з Pandas: DataFrame, діапазон дат та використання

⚡ Розумний підсумок

Pandas — це програма з відкритим вихідним кодом Python Бібліотека для маніпулювання табличними даними. Вона надає структури Series та DataFrame, діапазони дат, помічники перевірки та операції зрізу, видалення, конкатенації, сортування та перейменування, продемонстровані в цьому посібнику.

  • 🔘 Побудовано на NumPy: Pandas вимагає NumPy, який надає масиви за кожною серією та кадром даних (DataFrame).
  • ☑️ Дві структури: Серія зберігає один позначений вимір; DataFrame зберігає рядки та стовпці змішаних типів.
  • Діапазон дат: pd.date_range() створює індекс з початкової дати, кількості періодів та частоти.
  • 🧪 Спочатку перевірте: Функції head(), tail() та describe() показують форму, розкид та процентилі перед будь-яким аналізом.
  • 🛠️ Точно нарізати: Імена дужок вибирають стовпці, loc вибирає за міткою, а iloc вибирає за позицією.
  • ⚠️ Примітка до версії: Псевдонім частоти M застарів у Pandas 2.2; у поточних випусках очікується ME.

Python Підручник з Pandas: DataFrame, діапазон дат та використання Pandas

У чому їжа для панд Python?

Панди це бібліотека з відкритим кодом, яка дозволяє виконувати маніпулювання даними та їх аналіз у Python, що охоплює як числові таблиці, так і часові ряди. Він забезпечує простий спосіб створення, маніпулювання та обробки даних і побудований на основі numpy, тому для роботи Pandas має бути присутнім NumPy.

Навіщо використовувати Pandas?

Науковці даних використовують Pandas у Python для наступних переваг:

  • Легко обробляє відсутні дані
  • Він використовує Series для одновимірних даних та DataFrame для багатовимірних даних.
  • Це забезпечує ефективний спосіб розділення даних
  • Він забезпечує гнучкий спосіб об’єднання, конкатенації або зміни форми даних
  • Він включає потужний інструментарій для роботи з часовими рядами

Коротше кажучи, Pandas надає потужні, прості у використанні структури даних, а також засоби для швидкої роботи з ними, саме тому він закріплює більшість Python аналіз даних працювати.

Як встановити Pandas

Pandas постачається з Anaconda та більшістю керованих служб блокнотів, тому зазвичай його вже встановлено. Якщо імпорт не вдається, його додає одна з команд нижче. Вбудоване середовище Як встановити TensorFlow також містить панд.

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

Що таке Pandas DataFrame?

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

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

Макет Pandas DataFrame з позначеним індексом рядка та іменованими стовпцями

Що таке серіал?

Серія (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 з відсутнім значенням у третьому рядку. Відсутні значення в Python показано як NaN та np.nan з NumPy створює його штучно.

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

Вихід

0    1.0
1    2.0
2    NaN
dtype: float64

Створіть Pandas DataFrame

Ви можете перетворити масив 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 Джон
1 40 коваль

Дані про діапазон панд

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. У поточних випусках pass 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) Використання хвостової функції

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
std 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

Сполучення

Ви можете об'єднати два DataFrames за допомогою 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 Джон
1 30 коваль
2 50 Пол
3 26 Адам
4 11 коваль

Видалити дублікати

Коли набір даних містить дублікати інформації, drop_duplicates() це простий спосіб виключити повторювані рядки. df_concat містить дублікат спостереження: Smith з'являється двічі в name .

df_concat.drop_duplicates('name')
вік ім'я
0 25 Джон
1 30 коваль
2 50 Пол
3 26 Адам

Сортувати значення

Ви можете сортувати кадр за допомогою sort_values(). Зверніть увагу на це Age було створено як текст, тому рядки сортуються в порядку рядка.

df_concat.sort_values('Age')
вік ім'я
4 11 коваль
0 25 Джон
3 26 Адам
1 30 коваль
2 50 Пол

Перейменувати стовпці

Скористайтеся кнопкою rename() щоб перейменувати стовпець у Pandas. У кожній парі перше значення – це ім'я поточного стовпця, а друге – нове.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Age_ppl Прізвище
0 25 Джон
1 30 коваль
2 50 Пол
3 26 Адам
4 11 коваль

Короткий довідник методів Pandas

Ця таблиця зіставляє кожне поширене завдання з методом Pandas, який його виконує.

Завдання Метод
імпортувати дані read_csv
створити серію Серія
Створити Dataframe DataFrame
Створення діапазону дат проміжок часу
повернути голову голова
зворотний хвіст хвіст
Описувати описувати
фрагмент, використовуючи назву dataname['columnname']
Розріжте за допомогою рядів назва_даних[0:5]

Поширені запитання

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

isnull() позначає їх, dropna() видаляє уражені рядки або стовпці, а fillna() замінює їх константою або статистикою, такою як середнє значення стовпця. Відсутні записи друкуються як NaN.

groupby() розбиває рядки на групи за ключовим стовпцем, застосовує агрегацію, таку як кількість, сума або середнє значення, до кожної групи, а потім об'єднує результати в новий фрейм.

Створіть булеву маску та передайте її в дужках, наприклад, 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перегляньте типи даних та кількість рядків, перш ніж довіряти результату.

Підсумуйте цей пост за допомогою: