Python Panda bemutató: DataFrame, dátumtartomány és használat

⚡ Okos összefoglaló

A Panda a nyílt forráskódú Python táblázatos adatok kezeléséhez használt könyvtár. Ez biztosítja a sorozat- és DataFrame struktúrákat, dátumtartományokat, ellenőrző segédprogramokat, valamint a szeletelés, elvetés, összefűzés, rendezés és átnevezés műveleteket, amelyeket ebben a bemutatóban bemutatunk.

  • 🔘 NumPy-ra építve: A Pandashoz NumPy szükséges, amely minden Series és DataFrame mögötti tömböket biztosít.
  • ☑️ Két szerkezet: A Series egy címkézett dimenziót tárol; a DataFrame vegyes típusú sorokat és oszlopokat tárol.
  • Dátumtartományok: A pd.date_range() függvény egy indexet épít fel egy kezdő dátumból, egy időszakszámból és egy gyakoriságból.
  • 🧪 Először vizsgálja meg: A head(), tail() és describe() függvények az elemzés előtt feltárják az alakot, a terjedést és a percentiliseket.
  • 🇧🇷 Pontosan szeletelj: A zárójeles nevek oszlopokat választanak ki, a loc címke alapján, az iloc pedig pozíció alapján.
  • ⚠️ Verzió megjegyzés: Az M frekvenciaalias elavult a Pandas 2.2-es verziójától kezdve; a jelenlegi kiadásokban ME-t várnak.

Python Pandas oktatóanyag: DataFrame, dátumtartomány és a Pandas használata

Miben rejlik a panda? Python?

pandák egy nyílt forráskódú könyvtár, amely lehetővé teszi az adatok manipulálását és elemzését Python, amely numerikus táblázatokat és idősorokat egyaránt lefed. Egyszerű módot kínál az adatok létrehozására, kezelésére és feldolgozására, és a következőkre épül: numpy, tehát a NumPy-nak jelen kell lennie ahhoz, hogy a Pandas működjön.

Miért érdemes Pandát használni?

Az adattudósok a pandákat használják Python a következő előnyökért:

  • Könnyen kezeli a hiányzó adatokat
  • Egydimenziós adatokhoz Series, többdimenziós adatokhoz DataFrame formátumot használ.
  • Hatékony módot biztosít az adatok szeletelésére
  • Rugalmas módot biztosít az adatok egyesítésére, összefűzésére vagy átformálására
  • Tartalmaz egy hatékony idősoros eszközkészletet

Röviden, a Pandas hatékony, könnyen használható adatstruktúrákat, valamint a gyors kezelésükhöz szükséges eszközöket kínál, ezért a legtöbb adatot lehorgonyozza. Python adatelemzés működik.

Hogyan telepítsük a Pandákat

A Pandas tartalmazza az Anacondát és a legtöbb felügyelt jegyzetfüzet-szolgáltatást, így általában már telepítve van. Ha az importálás sikertelen, az alábbi parancsok egyike hozzáadja. A beépített környezet A TensorFlow telepítése pandákat is tartalmaz.

  • csipog: pip install pandas
  • Anakonda: conda install -c anaconda pandas
  • Belül a Jupyter jegyzetfüzet sejt:
import sys
!conda install --yes --prefix {sys.prefix} pandas

Mi az a Pandas DataFrame?

A Pandas DataFrame egy kétdimenziós címkézett adatstruktúra, amelynek oszlopai különböző típusokat tartalmazhatnak. Ez a táblázatos formátumú adatok tárolásának szabványos módja: a sorok a megfigyeléseket, az oszlopok pedig az információkat tartalmazzák. Például: ár lehet egy oszlop neve, a 2, 3, 4 pedig az árértékek.

Az adatkeretek jól ismertek a statisztikusok és más adatkezelők számára. Az alábbi kép ezt az alakzatot mutatja – egy címkézett sorindex lefelé az oldalán és elnevezett oszlopok a tetején.

Pandas DataFrame elrendezés címkézett sorindexszel és elnevezett oszlopokkal

Mi az a sorozat?

A sorozatok (Series) egy egydimenziós adatszerkezetek. Bármilyen adattípust tárolhat, például egész számot, lebegőpontos számot vagy karakterláncot, és akkor hasznosak, ha számítást szeretnénk végrehajtani vagy egydimenziós tömböt visszaadni. Egy sorozat definíció szerint nem tartalmazhat több oszlopot; ebben az esetben használjuk a DataFrame struktúrát.

A Pandas sorozat konstruktora a következő paramétereket veszi fel:

  • Adatok: lehet lista, szótár vagy skaláris érték
pd.Series([1., 2., 3.])
0    1.0
1    2.0
2    3.0
dtype: float64

Indexet adhatsz hozzá a következővel: indexNevét adja a soroknak, és a hosszának meg kell egyeznie az oszlop méretével.

pd.Series([1., 2., 3.], index=['a', 'b', 'c'])

Az alábbiakban egy Panda sorozatot hozol létre, amelynek harmadik sorában hiányzik egy érték. Hiányzó értékek a következőben: Python jelennek meg NaNés np.nan A NumPy mesterségesen hoz létre egyet.

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

teljesítmény

0    1.0
1    2.0
2    NaN
dtype: float64

Hozzon létre Pandas DataFrame-et

Egy NumPy tömböt DataFrame-mé alakíthatsz a következővel: pd.DataFrame()Az ellenkezője is lehetséges: egy DataFrame tömbbé alakításához használjuk a következőt: np.array()vagy df.to_numpy(), amelyet a jelenlegi Pandas dokumentáció ajánl.

## 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]]

Egy szótár ugyanolyan jól működik bemenetként pd.DataFrame().

dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
Kor Név
0 30 János
1 40 Kovács

Panda-tartomány adatai

A Pandas egy kényelmes API-val rendelkezik dátumtartományok létrehozásához, amelyek egy idősor indexévé válnak. A hívás a következő formátumú:

pd.date_range(start, periods, freq):

  • Az első paraméter a kezdő dátum
  • A második paraméter az időszakok száma (nem kötelező, ha a befejezési dátum meg van adva)
  • Az utolsó paraméter a gyakoriság: nap D, hónap M és év Y
## Create date
# Days
dates_d = pd.date_range('20300101', periods=6, freq='D')
print('Day:', dates_d)

teljesítmény

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)

teljesítmény

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')

Verzió megjegyzés: a hónap álneve M fent használt elavult a Pandas 2.2-es verziójától, és eltávolításra került a Pandas 3.0-ból. A jelenlegi kiadásokon pass freq='ME' a hónap végére; az így kapott index megegyezik.

Adatok vizsgálata

Egy adathalmaz elejének vagy végének ellenőrzéséhez használhatod a következőt: head() or tail() meghívódik a DataFrame-re, ahogy az alábbi Pandas-példa is mutatja.

Step 1) Hozz létre egy véletlenszerű sorozatot a NumPy programmal. A sorozat 4 oszlopból és 6 sorból áll.

random = np.random.randn(6,4)

Step 2) Ezután létrehoz egy DataFrame-et a Pandas használatával.

Felhasználás dates_m indexként, így minden sor egy dátumnak megfelelő nevet kap, és nevezze el a 4 oszlopot a következővel: columns érv.

# Create data with date
df = pd.DataFrame(random,
                  index=dates_m,
                  columns=list('ABCD'))

Mivel np.random.randn() Ha vetőmag nélkül fut, az Ön adatai eltérnek az itt nyomtatott adatoktól. np.random.seed(0) először, ha egy fix halmazt szeretne reprodukálni.

Step 3) A fej funkció használata

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

Step 4) A farokfüggvény használata

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

Step 5) Egy nagyszerű módja annak, hogy képet kapjunk az adatokról, az describe()Az adathalmaz darabszámát, átlagát, szórását, minimumát, maximumát és percentilis értékeit jelenti.

df.describe()
A B C D
számít 6.000000 6.000000 6.000000 6.000000
jelent 0.002317 0.256928 -0.151896 0.467601
std 0.908145 0.746939 0.834664 0.908910
perc -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
max 1.139433 1.318510 0.857751 1.615822

Szelet adatok

A szeletelés sorok vagy oszlopok egy részhalmazát húzza ki egy DataFrame-ből. Az oszlop nevét használhatja példáultracegy oszlop, ahogy az alábbi Pandák példája is mutatja.

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

Több oszlop kijelöléséhez dupla zárójelre van szükség. [[..,..]]Az első pár azt jelenti, hogy oszlopokat szeretnél kiválasztani; a második pár azt adja meg, hogy mely oszlopokat kell visszaadni.

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

A sorokat kettősponttal szeletelheted. Az alábbi kód az első három sort adja vissza.

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

Az loc Az accessor név szerint választja ki az oszlopokat. A szokásos módon a vessző előtti érték a sorokat, az utána következő pedig az oszlopokat jelöli, és szögletes zárójelek szükségesek egynél több oszlop kiválasztásához.

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

Több sor és oszlop kiválasztására van egy másik módszer is. iloc[] egész szám pozíciókat használ oszlopnevek helyett, így az alábbi kód ugyanazt a DataFrame-et adja vissza, mint a fenti.

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

Dobj egy oszlopot

Oszlopokat törölhet a következővel: df.drop(), átadva a neveket a columns érv.

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

láncolat

Két DataFrame-et összefűzhetsz a következővel: pd.concat()Először hozd létre a két keretet.

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])  

Ezután fűzd össze őket.

df_concat = pd.concat([df1,df2]) 
df_concat
Kor név
0 25 János
1 30 Kovács
2 50 Paul
3 26 Ádám
4 11 Kovács

Dobd el a másolatokat

Amikor egy adathalmaz ismétlődő információkat tartalmaz, drop_duplicates() egy egyszerű módja az ismétlődő sorok kizárásának. df_concat ismétlődő megfigyelést tartalmaz: Smith kétszer jelenik meg a name oszlop.

df_concat.drop_duplicates('name')
Kor név
0 25 János
1 30 Kovács
2 50 Paul
3 26 Ádám

Értékek rendezése

Rendezhet egy keretet a következővel: sort_values(). Vegye figyelembe, hogy Age szövegként lett létrehozva, így a sorok karakterlánc sorrendben rendeződnek.

df_concat.sort_values('Age')
Kor név
4 11 Kovács
0 25 János
3 26 Ádám
1 30 Kovács
2 50 Paul

Oszlopok átnevezése

Felhasználás rename() egy oszlop átnevezéséhez a Pandasban. Minden párban az első érték az aktuális oszlopnév, a második pedig az új.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Age_ppl Vezetéknév
0 25 János
1 30 Kovács
2 50 Paul
3 26 Ádám
4 11 Kovács

Panda módszerek gyorsreferencia

Ez a táblázat minden gyakori feladatot leképez az azt végrehajtó Pandas metódushoz.

Feladat Módszer
adatok importálása read_csv
sorozatot készíteni Series of
Adatkeret létrehozása DataFrame
Dátumtartomány létrehozása időintervallum
vissza a fejét fej
visszatérő farok farok
Írja le leírni
szelet a név használatával adatnév['oszlopnév']
Szeletelje fel sorok segítségével adat_név[0:5]

GYIK

Hívás pd.read_csv() egy úttal vagy URLAdjon neveket a címkézett oszlopokhoz, a „sep” paranccsal más elválasztójelet adhat meg, és a „usecols” paranccsal csak a szükséges oszlopokat tarthatja meg.

Az isnull() megjelöli őket, a dropna() eltávolítja az érintett sorokat vagy oszlopokat, a fillna() pedig egy konstanssal vagy statisztikával, például az oszlopok átlagával helyettesíti be őket. A hiányzó bejegyzések NaN formátumban jelennek meg.

A groupby() függvény a sorokat egy kulcsoszlop alapján csoportokra osztja, minden csoportra aggregációt alkalmaz, például darabszámot, összeget vagy átlagot, majd az eredményeket egy új keretbe egyesíti.

Hozz létre egy logikai maszkot, és add meg zárójelben, például df[df.Age == 30]. Kombináld a maszkokat az „és” jellel és a függőleges vonal operátorokkal, majd tördeld a „tördelés” karaktereket.ping minden összehasonlítás zárójelben van.

A pd.merge() függvény egy kulcsoszlop sorait illeszti össze úgy, ahogyan egy SQL A join függvény a kulcsok egyeztetése helyett kereteket halmoz fel, ha a kulcsok értéke belső, bal, jobb vagy külső.

A df.to_csv('out.csv', index=False) egy vesszőfájlt ír, a df.to_excel('out.xlsx') pedig egy munkalapot.ping az index elkerüli a névtelen első oszlopot a következő olvasáskor.

Az MI asszisztensek egy új keretet profiloznak, javaslatot tesznek a futtatásra érdemes describe, groupby és plot hívásokra, és megjelölik a páratlan adattípusú vagy sok null értékű oszlopokat. Minden javaslatot megerősítenek a nyers adatokkal szemben.

Igen. GitHub másodpilóta egy egyszerű megjegyzést egészít ki működő Pandas kóddá egy Jupyter sejt. RevAz eredmény megbízása előtt tekintse meg a dátumtípusokat és a sorok számát.

Foglald össze ezt a bejegyzést a következőképpen: