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.
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.
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ónapMés évY
## 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] |

