Python Урок за Pandas: DataFrame, диапазон от дати и употреба
⚡ Умно обобщение
Pandas е с отворен код Python Библиотека за манипулиране на таблични данни. Тя предоставя структурите Series и DataFrame, диапазоните от дати, помощните инструменти за проверка и операциите за срязване, премахване, конкатениране, сортиране и преименуване, демонстрирани в това ръководство.
В какво се намират пандите Python?
Пандите е библиотека с отворен код, която ви позволява да извършвате манипулиране и анализ на данни в Python, обхващащ както числови таблици, така и времеви серии. Той предоставя лесен начин за създаване, манипулиране и обработка на данни и е изграден върху numpy, така че NumPy трябва да е наличен, за да работи Pandas.
Защо да използвате Pandas?
Учените по данни използват Pandas в Python за следните предимства:
- Лесно се справя с липсващи данни
- Използва Series за едномерни данни и DataFrame за многомерни данни.
- Той осигурява ефективен начин за разделяне на данните
- Той предоставя гъвкав начин за обединяване, свързване или преоформяне на данните
- Включва мощен набор от инструменти за времеви серии
Накратко, Pandas предоставя мощни, лесни за използване структури от данни, както и средства за бърза работа с тях, поради което е и опора за повечето... Python Анализ на данни работят.
Как да инсталирате Pandas
Pandas се доставя с Anaconda и с повечето услуги за управлявани преносими компютри, така че обикновено е вече инсталиран. Ако импортирането е неуспешно, една от командите по-долу го добавя. Вградената среда Как да инсталирате TensorFlow също съдържа панди.
- пип:
pip install pandas - Анаконда:
conda install -c anaconda pandas - Вътре в a Jupyter Ноутбук клетка:
import sys !conda install --yes --prefix {sys.prefix} pandas
Какво е Pandas DataFrame?
Pandas DataFrame е двуизмерна етикетирана структура от данни, чиито колони могат да съдържат различни типове. Това е стандартният начин за съхраняване на данни в табличен формат: редовете съдържат наблюденията, а колоните именуват информацията. Например цена може да бъде името на колона, а 2, 3, 4 могат да бъдат ценовите стойности.
Рамките от данни са добре познати на статистиците и други специалисти по данни. Картината по-долу показва тази форма - обозначен индекс на ред отстрани и именувани колони в горната част.
Какво е серия?
Серията е едномерна структура от данни. Тя може да съдържа всякакъв тип данни, като цяло число, число с плаваща запетая или низ, и е полезна, когато искате да извършите изчисление или да върнете едномерен масив. Серията, по дефиниция, не може да има множество колони; в този случай използвайте структурата 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) Използване на функцията за глава
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 |
| станд | 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 | Paul |
| 3 | 26 | Адам |
| 4 | 11 | Ковач |
Премахване на дубликати
Когато набор от данни съдържа дублирана информация, drop_duplicates() е лесен начин за изключване на повтарящите се редове. df_concat съдържа дублирано наблюдение: Smith появява се два пъти в name колона.
df_concat.drop_duplicates('name')
| Възраст | име | |
|---|---|---|
| 0 | 25 | клозет |
| 1 | 30 | Ковач |
| 2 | 50 | Paul |
| 3 | 26 | Адам |
Сортиране на стойности
Можете да сортирате рамка с sort_values(), Отбележи, че Age беше създаден като текст тук, така че редовете се сортират по ред на низовете.
df_concat.sort_values('Age')
| Възраст | име | |
|---|---|---|
| 4 | 11 | Ковач |
| 0 | 25 | клозет |
| 3 | 26 | Адам |
| 1 | 30 | Ковач |
| 2 | 50 | Paul |
Преименуване на колони
употреба rename() за да преименувате колона в Pandas. Във всяка двойка първата стойност е текущото име на колоната, а втората е новата.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Възраст_ppl | Фамилно име | |
|---|---|---|
| 0 | 25 | клозет |
| 1 | 30 | Ковач |
| 2 | 50 | Paul |
| 3 | 26 | Адам |
| 4 | 11 | Ковач |
Бърз справочник за методите на Pandas
Тази таблица съпоставя всяка често срещана задача с метода на Pandas, който я изпълнява.
| Task | Начин на доставка |
|---|---|
| импортиране на данни | read_csv |
| създайте серии | Серия |
| Създайте Dataframe | DataFrame |
| Създайте период от време | диапазон_дати |
| връщане на главата | глава |
| обратна опашка | опашка |
| Описвам | описвам |
| парче с помощта на име | име на данни ['име на колона'] |
| Нарежете с помощта на редове | име_на_данни[0:5] |

