Python Pandas alapok
# Importimport pandas as pd## csv olvasás + írásuser = pd.read_csv('ugyfelcsv1.csv', header=None, nrows=5) ## csv-ből olvasás, nincs fejlécsor, az első 5 sortuser ## megjelenítésuser.to_csv('ugyfelcsv1_kimenet.csv') ## csv-be mentés## xls olvasás + írásxlsx = pd.ExcelFile('telepules.xlsx') ## xls-ből olvasásdf = pd.read_excel(xlsx, 'telepules') ## aktív munkalap kijelőlésedf ## megjelenítés#df.to_excel('telepules_kimenet.xlsx', sheet_name='Tel') ## xls-be mentés| helyseg | lakos | |
|---|---|---|
| 0 | Debrecen | 204333 |
| 1 | Miskolc | 162905 |
| 2 | Szeged | 161837 |
| 3 | Pécs | 147719 |
| 4 | Budapest 11. ker. | 144599 |
| ... | ... | ... |
| 3171 | Felsőszenterzsébet | 17 |
| 3172 | Tornakápolna | 15 |
| 3173 | Tornabarakony | 14 |
| 3174 | Gagyapáti | 13 |
| 3175 | Iborfia | 9 |
3176 rows × 2 columns
## alap infok (pandas)print('Sor, oszlop szám' ,df.shape) ## sor és oszlopszám kiírásaprint('index', df.index)print('Oszlop nevek', df.columns)print('ifo',df.info())print('count',df.count())print('cumsum', df.cumsum())print('describe',df.describe())print('Elemi egyedi értékek',df['helyseg'].unique()) print('Elemi értékek száma',df['helyseg'].nunique()) Sor, oszlop szám (3176, 2) index RangeIndex(start=0, stop=3176, step=1) Oszlop nevek Index(['helyseg', 'lakos'], dtype='object') <class 'pandas.core.frame.DataFrame'> RangeIndex: 3176 entries, 0 to 3175 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 helyseg 3176 non-null object 1 lakos 3176 non-null int64 dtypes: int64(1), object(1) memory usage: 49.8+ KB ifo None count helyseg 3176 lakos 3176 dtype: int64 cumsum helyseg lakos 0 Debrecen 204333 1 DebrecenMiskolc 367238 2 DebrecenMiskolcSzeged 529075 3 DebrecenMiskolcSzegedPécs 676794 4 DebrecenMiskolcSzegedPécsBudapest 11. ker. 821393 ... ... ... 3171 DebrecenMiskolcSzegedPécsBudapest 11. ker.Győr... 9908747 3172 DebrecenMiskolcSzegedPécsBudapest 11. ker.Győr... 9908762 3173 DebrecenMiskolcSzegedPécsBudapest 11. ker.Győr... 9908776 3174 DebrecenMiskolcSzegedPécsBudapest 11. ker.Győr... 9908789 3175 DebrecenMiskolcSzegedPécsBudapest 11. ker.Győr... 9908798 [3176 rows x 2 columns] describe lakos count 3176.000000 mean 3119.898615 std 11263.585339 min 9.000000 25% 345.750000 50% 837.000000 75% 1965.250000 max 204333.000000 Elemi egyedi értékek ['Debrecen' 'Miskolc' 'Szeged' ... 'Tornabarakony' 'Gagyapáti' 'Iborfia'] Értékek száma 3176
# df.rank()df.sort_values(by='lakos') df[df['lakos']>10000000]print(df[1:3])print('-----------')print(df.loc[4][0])print('-----------')print(df.iloc[2])print('-----------')print(df.loc[3][0])helyseg lakos 1 Miskolc 162905 2 Szeged 161837 ----------- Budapest 11. ker. ----------- helyseg Szeged lakos 161837 Name: 2, dtype: object ----------- Pécs
## Text állományok megnyítása (csv: ,)user_1 = pd.read_csv("ugyfelcsv1.csv")user_2 = pd.read_csv("ugyfelcsv2.csv")# user = pd.read_csv('ugyfelcsv11.txt', sep='\t', lineterminator='\r') ## TAB szeperátuser = pd.read_csv('ugyfelcsv11.txt', sep=';', lineterminator='\r') ## pontosvesszővel szeperátuser| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M |
| 2 | 3 | Kline | Silas | 1938-07-16 | M |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M |
| 5 | 6 | Frank | Blair | 1977-12-19 | M |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F |
| 8 | 9 | Brown | Inga | 1942-04-18 | F |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F |
# user_1.head() # csak első négy sor megjelenítéseuser_1| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M |
| 2 | 3 | Kline | Silas | 1938-07-16 | M |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M |
| 5 | 6 | Frank | Blair | 1977-12-19 | M |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F |
| 8 | 9 | Brown | Inga | 1942-04-18 | F |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F |
## charset beállítás utánni megnyításimport codecsdoc = codecs.open('ugyfelcsv11.txt','rU','UTF-8') ## open for reading with "universal" type setuser_1 = pd.read_csv(doc, sep=';')user_1| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M |
| 2 | 3 | Kline | Silas | 1938-07-16 | M |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M |
| 5 | 6 | Frank | Blair | 1977-12-19 | M |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F |
| 8 | 9 | Brown | Inga | 1942-04-18 | F |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F |
# user_dada.rename(columns={"ugyfel_id": "ID"}, inplace=True) ## fejléc átnevezése, ha szükséges lenneuser_2.head() ## csak első őt sor | ugyfel_id | igazolvanytipus_id | igazolvanyszam | |
|---|---|---|---|
| 0 | 3 | J | YLHVLF29 |
| 1 | 4 | J | SIDNEE06 |
| 2 | 5 | SZ | DUSUNF64 |
| 3 | 6 | UL | ENBNYK36 |
| 4 | 7 | UL | PFOTXW50 |
# user_id.rename(columns={"ugyfel_id": "ID"}, inplace=True)user_2.head(10)| ugyfel_id | igazolvanytipus_id | igazolvanyszam | |
|---|---|---|---|
| 0 | 3 | J | YLHVLF29 |
| 1 | 4 | J | SIDNEE06 |
| 2 | 5 | SZ | DUSUNF64 |
| 3 | 6 | UL | ENBNYK36 |
| 4 | 7 | UL | PFOTXW50 |
| 5 | 8 | J | MMRDLZ25 |
| 6 | 9 | SZ | SKCMWG34 |
| 7 | 10 | UL | VUKMBG65 |
| 8 | 11 | SZ | NCGJMG03 |
| 9 | 12 | SZ | LZQSRL48 |
Két forrás tartalmának automatikus összekapcsolása 0.
Kapcsolás automatikusan a kulcs mező szerint történik
Amikor több táblában is tárolunk adatokat, és előfordulhat olyan, hogy az egyes táblák adatainak önmagában semmilyen értelme nincsen.
A megoldás keresés közben általában előjön, hogy egy másik táblázatban vannak olyan adatok amelyek segítenek az adatok hasznosulásában, de ehez a táblázatokat össze kell kapcsolni, ezt hívjuk merging -nek, azaz összeolvadásnak.
A panda dataframe .merge metódus a közös oszlopokat keresi a paraméterben megadott táblákban, majd ezek után egy új táblában a különböző sorokat ötvözi.
new_df = pd.merge(orders, costumers)
Szerencsére minden DataFrame-nek van merge metódusa, így ha több táblát is össze akarunk olvasztani, akkor ezeket tudjuk láncolatban használni.
new_df = orders.merge(customers).merge(products)
result = pd.merge(user_1, user_2, how='left')result| ugyfel_id | vnev | knev | szdatum | nem | igazolvanytipus_id | igazolvanyszam | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | NaN | NaN |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | NaN | NaN |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | J | YLHVLF29 |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | J | SIDNEE06 |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | SZ | DUSUNF64 |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | UL | ENBNYK36 |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | UL | PFOTXW50 |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | J | MMRDLZ25 |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | SZ | SKCMWG34 |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | UL | VUKMBG65 |
## jelőlő bekapcsolása#print(pd.merge(user_1, user_2, right_index=True, left_index=True).head())#print('-----------------')#print(pd.merge(user_1, user_2, how='left', suffixes=('_left', '_right')).head())pd.merge(user_1, user_2, right_index=True, left_index=True).head()| ugyfel_id_x | vnev | knev | szdatum | nem | ugyfel_id_y | igazolvanytipus_id | igazolvanyszam | |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | 3 | J | YLHVLF29 |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | 4 | J | SIDNEE06 |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | 5 | SZ | DUSUNF64 |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | 6 | UL | ENBNYK36 |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | 7 | UL | PFOTXW50 |
result = pd.merge(user_1, user_2[['ugyfel_id', 'igazolvanyszam']], ## hozzáfűzési mezők, az első a kulcs mező on='ugyfel_id', ## kulcs mező a kapcsoláshoz (azonos nevüek legyenek) how='left', ## Kapcsolat módja (left, right, outer, inner) indicator=True ## jelző újmezőben megjelenítése )result.head(10)| ugyfel_id | vnev | knev | szdatum | nem | igazolvanyszam | _merge | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | NaN | left_only |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | NaN | left_only |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | YLHVLF29 | both |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | SIDNEE06 | both |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | DUSUNF64 | both |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | ENBNYK36 | both |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | PFOTXW50 | both |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | MMRDLZ25 | both |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | SKCMWG34 | both |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | VUKMBG65 | both |
Nézzük egy érték vizsgálatot.
print("user_1 shape: {}".format(user_1.shape))print("user_2 shape: {}".format(user_2.shape))user_1 dimensions: (10, 5) user_2 dimensions: (10, 3)
# Azonositó benn foglalás ellenőrzéseuser_1['ugyfel_id'].isin(user_2['ugyfel_id']).value_counts()True 8 False 2 Name: ugyfel_id, dtype: int64
result = pd.merge(user_1, user_2[['igazolvanytipus_id', 'ugyfel_id']], ## hozzáfűzési mezők // nem az első a kulcs mező left_on='ugyfel_id', right_on='ugyfel_id', ## kulcs mezők konkrét megadása a kapcsoláshoz (eltérő nevüek) how='outer', ## Kapcsolat módja left indicator=True ## jelző újmezőben megjelenítése )result.head(12) ## első 12 sor megjelenítése (most összesen ennyi van)| ugyfel_id | vnev | knev | szdatum | nem | igazolvanytipus_id | _merge | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | NaN | left_only |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | NaN | left_only |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | J | both |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | J | both |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | SZ | both |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | UL | both |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | UL | both |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | J | both |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | SZ | both |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | UL | both |
| 10 | 11 | NaN | NaN | NaN | NaN | SZ | right_only |
| 11 | 12 | NaN | NaN | NaN | NaN | SZ | right_only |
result = pd.merge(user_1, user_2, on='ugyfel_id', how='left', suffixes=('_left', '_right'))result.head(12) | ugyfel_id | vnev | knev | szdatum | nem | igazolvanytipus_id | igazolvanyszam | |
|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | NaN | NaN |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | NaN | NaN |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | J | YLHVLF29 |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | J | SIDNEE06 |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | SZ | DUSUNF64 |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | UL | ENBNYK36 |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | UL | PFOTXW50 |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | J | MMRDLZ25 |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | SZ | SKCMWG34 |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | UL | VUKMBG65 |
#df['col_2'].apply(lambda x : x * 2)#user_1['UJ_UF_ID'].apply(lambda x : x * 2)#szdatum#new = user_1["szdatum"].str.split("-", n = 1, expand = True) ## csak egy vágásnew = user_1["szdatum"].str.split("-", expand = True)user_1['EV']= new[0] ## új mező létrehozása, ha még nincsuser_1['HO']= new[1] ## új mező létrehozása, ha még nincsuser_1['NAP']= new[2] ## új mező létrehozása, ha még nincsuser_1| ugyfel_id | vnev | knev | szdatum | nem | EV | HO | NAP | |
|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | 1954 | 07 | 10 |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | 1932 | 02 | 24 |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | 1938 | 07 | 16 |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | 1972 | 10 | 28 |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | 1940 | 02 | 02 |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | 1977 | 12 | 19 |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | 1989 | 04 | 06 |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | 1926 | 03 | 25 |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | 1942 | 04 | 18 |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | 1969 | 05 | 14 |
user_1["kisbetus_neve"] = user_1.vnev.apply(str.lower) ## új mező létrehozása, ha még nincsuser_1["idx2"] = user_1.ugyfel_id.apply(lambda x : x * 2) ## új mező létrehozása, ha még nincs## user_1.drop('Lowercase Name', axis=1, inplace=True) ## oszlop/mező törléseuser_1| ugyfel_id | vnev | knev | szdatum | nem | EV | HO | NAP | kisbetus_neve | idx2 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | Walter | Gwendolyn | 1954-07-10 | M | 1954 | 07 | 10 | walter | 2 |
| 1 | 2 | Armstrong | Kieran | 1932-02-24 | M | 1932 | 02 | 24 | armstrong | 4 |
| 2 | 3 | Kline | Silas | 1938-07-16 | M | 1938 | 07 | 16 | kline | 6 |
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M | 1972 | 10 | 28 | gallagher | 8 |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M | 1940 | 02 | 02 | gallagher | 10 |
| 5 | 6 | Frank | Blair | 1977-12-19 | M | 1977 | 12 | 19 | frank | 12 |
| 6 | 7 | Cash | Vaughan | 1989-04-06 | M | 1989 | 04 | 06 | cash | 14 |
| 7 | 8 | Shields | Charissa | 1926-03-25 | F | 1926 | 03 | 25 | shields | 16 |
| 8 | 9 | Brown | Inga | 1942-04-18 | F | 1942 | 04 | 18 | brown | 18 |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F | 1969 | 05 | 14 | crawford | 20 |
Több hasonló tábla összefűzése
Ha az adatok, amelyek hasonlóak, akár több táblában vannak tárolva, akkor azok beolvasása egy közös táblába is lehetséges, így a közös elemzés is elvégezhető.
pd.concat([df1, df2])
Mivel viszik magukkal az azonosítójukat, szükséges az összefűzés után a reset_index() mely létrehoz egy új indexelést.
print("Összesen van {} sorunk, amelyben nem szerepel egy oszlopban sem nulla.".format( (result.apply(lambda x: x.isnull().sum(), axis=1) == 0).sum()))print("Hiányzó adat {} szor fordul elő az 'igazolvanytipus_id' mezőben.".format( result['igazolvanytipus_id'].isnull().sum()))Összesen van 8 sorunk, amelyben nem szerepel egy oszlopban sem nulla. Hiányzó adat 2 szor fordul elő az 'igazolvanytipus_id' mezőben.
user_1[user_1.nem == 'F'] ## Nők megjelenitése csak azok amelyek a nem mezőben F -et tartalmaznak| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 7 | 8 | Shields | Charissa | 1926-03-25 | F |
| 8 | 9 | Brown | Inga | 1942-04-18 | F |
| 9 | 10 | Crawford | Glenna | 1969-05-14 | F |
user_1[user_1.vnev.str.startswith('Ga')] ## Ga vnev kezdettel rendelkezők listázása| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 3 | 4 | Gallagher | Rhoda | 1972-10-28 | M |
| 4 | 5 | Gallagher | Robin | 1940-02-02 | M |
user_1[(user_1.nem == 'F') & (user_1.vnev.str.startswith('Br'))] ## többszörös feltétel| ugyfel_id | vnev | knev | szdatum | nem | |
|---|---|---|---|---|---|
| 8 | 9 | Brown | Inga | 1942-04-18 | F |
## Hányan vannak a nők és a férfiak és milyen idősek a legfiatalabbakuser_1.groupby("nem").agg({ "szdatum": "min", ## mean, max, .. "knev": "count" })| szdatum | knev | |
|---|---|---|
| nem | ||
| F | 1926-03-25 | 3 |
| M | 1932-02-24 | 7 |
- Link lekérése
- X
- Más alkalmazások
- Link lekérése
- X
- Más alkalmazások

Megjegyzések
Megjegyzés küldése