Датафрейми Pandas
Останнє оновлення 2026-03-29 | Редагувати цю сторінку
Огляд
Питання
- Як я можу виконати статистичний аналіз табличних даних?
Цілі
- Вибір окремих значень з датафрейму Pandas.
- Виділення цілих рядків або цілих стовпців з датафрейму.
- Вибір підмножини рядків і стовпців з датафрейму за одну операцію.
- Вибір підмножини з датафрейму за єдиним булевим критерієм.
Датафрейми та серії у Pandas
Датафрейм (DataFrame) містить декілька серій (Series); Датафрейм — це спосіб представлення таблиці в Pandas, а серія — це структура даних, яку Pandas використовує для представлення окремого стовпця.
Pandas побудована на основі бібліотеки Numpy, що означає, що більшість методів для масивів Numpy також застосовується до датафреймів та серій у Pandas.
Що робить Pandas таким привабливим? Це потужний інтерфейс для доступу до окремих записів таблиці, належної обробки відсутніх значень та підтримки операцій з датафреймами, подібних до тих, що застосовуються в реляційних базах даних.
Вибір значень
Існує два способи доступу до значення в позиції [i,j] у
датафреймі, залежно від того, як інтерпретується i.
Пам’ятайте, що датафрейм використовує індекс для ідентифікації
рядків таблиці; отже, кожен рядок має позицію в таблиці, а
також заголовок рядка (мітку), яка однозначно визначає
цей рядок у датафреймі.
Використовуйте DataFrame.iloc[..., ...] для вибору
значень за їх позицією
- Можна вказати позицію значення за допомогою числового індексу аналогічно 2D-версії вибору символів у рядках.
PYTHON
import pandas as pd
data = pd.read_csv('data/gapminder_gdp_europe.csv', index_col='country')
print(data.iloc[0, 0])
ВИХІД
1601.056136
Використовуйте DataFrame.loc[..., ...] для доступу до
значень за їхніми мітками.
- Можна вказати розташування, використовуючи заголовок рядку та/або стовпця.
ВИХІД
1601.056136
Використовуйте лише : замість мітки для позначення всіх
стовпців або всіх рядків.
- Це відповідає звичайному синтаксису зрізів у Python.
ВИХІД
gdpPercap_1952 1601.056136
gdpPercap_1957 1942.284244
gdpPercap_1962 2312.888958
gdpPercap_1967 2760.196931
gdpPercap_1972 3313.422188
gdpPercap_1977 3533.003910
gdpPercap_1982 3630.880722
gdpPercap_1987 3738.932735
gdpPercap_1992 2497.437901
gdpPercap_1997 3193.054604
gdpPercap_2002 4604.211737
gdpPercap_2007 5937.029526
Name: Albania, dtype: float64
- Той самий результат можна отримати, використовуючи
data.loc["Albania"](без вказання другого індексу).
ВИХІД
country
Albania 1601.056136
Austria 6137.076492
Belgium 8343.105127
⋮ ⋮ ⋮
Switzerland 14734.232750
Turkey 1969.100980
United Kingdom 9979.508487
Name: gdpPercap_1952, dtype: float64
- Той самий результат можна отримати, якщо надрукувати
data["gdpPercap_1952"] - Більш того, той самий результат можна отримати, застосовуючи нотацію
data.gdpPercap_1952(але не рекомендується, оскільки її легко сплутати з позначенням.для використання методів)
Вибирайте кілька стовпців або рядків за допомогою
DataFrame.loc та визначеного зрізу.
ВИХІД
gdpPercap_1962 gdpPercap_1967 gdpPercap_1972
country
Italy 8243.582340 10022.401310 12269.273780
Montenegro 4649.593785 5907.850937 7778.414017
Netherlands 12790.849560 15363.251360 18794.745670
Norway 13450.401510 16361.876470 18965.055510
Poland 5338.752143 6557.152776 8006.506993
У наведеному вище коді ми бачимо, що зріз із використанням
loc включає дані на обох вказаних кінцях, на
відміну від зрізу із застосуванням iloc,
де зріз не включає кінцевий індекс.
Результат зрізу можна використовувати в подальших операціях.
- Зазвичай зрізи формуються не тільки для друку.
- Усі статистичні оператори, які працюють зі цілими фреймами даних, так само працюють зі зрізами.
- Наприклад, обчислення максимальних значень у зрізі.
ВИХІД
gdpPercap_1962 13450.40151
gdpPercap_1967 16361.87647
gdpPercap_1972 18965.05551
dtype: float64
ВИХІД
gdpPercap_1962 4649.593785
gdpPercap_1967 5907.850937
gdpPercap_1972 7778.414017
dtype: float64
Використовуйте операції порівняння для вибору даних на основі певного значення.
- Порівняння здійснюється поелементно.
- Повертає датафрейм подібної форми, що містить значення
TrueтаFalse.
PYTHON
# Використовуємо частину даних, щоб результат був читабельним
subset = data.loc['Italy':'Poland', 'gdpPercap_1962':'gdpPercap_1972']
print('Subset of data:\n', subset)
# Які значення перевищують 10000 ?
print('\nWhere are values large?\n', subset > 10000)
ВИХІД
Subset of data:
gdpPercap_1962 gdpPercap_1967 gdpPercap_1972
country
Italy 8243.582340 10022.401310 12269.273780
Montenegro 4649.593785 5907.850937 7778.414017
Netherlands 12790.849560 15363.251360 18794.745670
Norway 13450.401510 16361.876470 18965.055510
Poland 5338.752143 6557.152776 8006.506993
Where are values large?
gdpPercap_1962 gdpPercap_1967 gdpPercap_1972
country
Italy False True True
Montenegro False False False
Netherlands True True True
Norway True True True
Poland False False False
Вибір значень або NaN за допомогою булевої маски.
- Датафрейм, що містить лише булеві значення, іноді називають маскою через спосіб його використання.
ВИХІД
gdpPercap_1962 gdpPercap_1967 gdpPercap_1972
country
Italy NaN 10022.40131 12269.27378
Montenegro NaN NaN NaN
Netherlands 12790.84956 15363.25136 18794.74567
Norway 13450.40151 16361.87647 18965.05551
Poland NaN NaN NaN
- Результат містить оригінальні значення, коли умова виконується, та NaN (Not a Number - не число) у решті випадків.
- Це зручно, оскільки операції на кшталт max, min, average автоматично ігнорують значення NaN.
ВИХІД
gdpPercap_1962 gdpPercap_1967 gdpPercap_1972
count 2.000000 3.000000 3.000000
mean 13120.625535 13915.843047 16676.358320
std 466.373656 3408.589070 3817.597015
min 12790.849560 10022.401310 12269.273780
25% 12955.737547 12692.826335 15532.009725
50% 13120.625535 15363.251360 18794.745670
75% 13285.513523 15862.563915 18879.900590
max 13450.401510 16361.876470 18965.055510