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, така че 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 могат да бъдат ценовите стойности.

Рамките от данни са добре познати на статистиците и други специалисти по данни. Картината по-долу показва тази форма - обозначен индекс на ред отстрани и именувани колони в горната част.

Оформление на Pandas DataFrame с етикетиран индекс на редове и именувани колони

Какво е серия?

Серията е едномерна структура от данни. Тя може да съдържа всякакъв тип данни, като цяло число, число с плаваща запетая или низ, и е полезна, когато искате да извършите изчисление или да върнете едномерен масив. Серията, по дефиниция, не може да има множество колони; в този случай използвайте структурата 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]

Въпроси и Отговори

ПОЗВЪНЯВАНЕ pd.read_csv() с пътека или URLДобавете имена към етикетите на колоните, sep за различен разделител и използвайте cols, за да запазите само колоните, от които се нуждаете.

isnull() ги маркира, dropna() премахва засегнатите редове или колони, а fillna() замества с константа или статистика, като например средната стойност на колоната. Липсващите записи се отпечатват като NaN.

groupby() разделя редовете на групи по ключова колона, прилага агрегация като брой, сума или средна стойност към всяка група, след което комбинира резултатите в нова рамка.

Създайте булева маска и я подайте в скоби, например df[df.Age == 30]. Комбинирайте маските с операторите ampersand и pipe, обвийтеping всяко сравнение в скоби.

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

df.to_csv('out.csv', index=False) записва файл със запетаи, а df.to_excel('out.xlsx') записва работен лист. Dropping Индексът избягва неназована първа колона при следващото четене.

Асистентите с изкуствен интелект профилират нов кадър, предлагат извикванията за описване, групиране и начертаване, които си струва да се изпълнят, и маркират колони с нечетни типове данни или много нули. Проверяват всяко предложение спрямо суровите данни.

Да. Копилот на GitHub допълва обикновен коментар в работещ Pandas код в Jupyter клетка. RevПрегледайте типовете данни и броя на редовете, преди да се доверите на резултата.

Обобщете тази публикация с: