Python Підручник з Pandas: DataFrame, діапазон дат та використання
⚡ Розумний підсумок
Pandas — це програма з відкритим вихідним кодом Python Бібліотека для маніпулювання табличними даними. Вона надає структури Series та DataFrame, діапазони дат, помічники перевірки та операції зрізу, видалення, конкатенації, сортування та перейменування, продемонстровані в цьому посібнику.
У чому їжа для панд 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 можуть бути значеннями ціни.
Фрейми даних добре відомі статистикам та іншим фахівцям з обробки даних. На зображенні нижче показано цю форму — позначений індекс рядка збоку та іменовані стовпці зверху.
Що таке серіал?
Серія (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] |

