Obvladajte ustvarjanje Pandas DataFrame. Ta vodič pokriva inicializacijo iz slovarjev, seznamov, NumPy polj in več za globalne podatkovne strokovnjake.
Ustvarjanje Pandas DataFrame: Podroben Pregled Inicializacije Podatkovnih Struktur
Dobrodošli v svetu manipulacije s podatki v Pythonu! V osrčju skoraj vsake naloge podatkovne analize leži knjižnica Pandas, njen temeljni kamen pa je DataFrame. Predstavljajte si DataFrame kot pametno, zmogljivo in prilagodljivo različico preglednice ali tabele v bazi podatkov, ki živi znotraj vašega okolja Python. Je primarno orodje za čiščenje, preoblikovanje, analiziranje in vizualizacijo podatkov. Toda preden lahko izvedete katero koli od teh podatkovnih čarovnij, morate najprej obvladati umetnost ustvarjanja DataFrame-a. Način, kako inicializirate to temeljno podatkovno strukturo, lahko postavi temelje za celotno analizo.
Ta celovit vodič je namenjen globalnemu občinstvu bodočih in izkušenih podatkovnih analitikov, znanstvenikov in inženirjev. Raziskali bomo najpogostejše in najmočnejše metode za ustvarjanje Pandas DataFrame-ov iz nič. Ne glede na to, ali so vaši podatki v slovarju, seznamu, NumPy polju ali drugem formatu, vam bo ta članek zagotovil znanje in praktične primere za samozavestno in učinkovito inicializacijo vaših DataFrame-ov. Zgradimo naše temelje.
Kaj točno je Pandas DataFrame?
Preden začnemo graditi, pojasnimo, kaj gradimo. Pandas DataFrame je dvodimenzionalna, po velikosti spremenljiva in potencialno heterogena tabelarična podatkovna struktura. Poglejmo si to podrobneje:
- Dvodimenzionalna: Ima vrstice in stolpce, tako kot preglednica.
- Po velikosti spremenljiva: Po ustvarjanju DataFrame-a lahko dodajate ali odstranjujete vrstice in stolpce.
- Heterogena: Stolpci lahko vsebujejo različne tipe podatkov. Na primer, en stolpec lahko vsebuje števila (cela števila ali števila s plavajočo vejico), drug lahko vsebuje besedilo (nize), tretji pa datume ali logične vrednosti (True/False).
DataFrame ima tri glavne komponente:
- Podatki: Dejanske vrednosti, ki jih vsebuje struktura, organizirane v vrsticah in stolpcih.
- Indeks: Oznake za vrstice. Če ne podate indeksa, Pandas ustvari privzetega, ki se začne z 0. Indeks omogoča zmogljiv način dostopa do podatkov in njihovega usklajevanja.
- Stolpci: Oznake za stolpce. Ti so ključni za dostop do določenih podatkovnih serij znotraj DataFrame-a.
Razumevanje te strukture je ključno za razumevanje, kako učinkovito ustvarjati in manipulirati z DataFrame-i.
Temelj: Uvoz knjižnice Pandas
Najprej najpomembnejše. Za uporabo knjižnice Pandas jo morate uvoziti v svoj Python skript ali beležnico. Splošno sprejeta konvencija, ki jo upoštevajo strokovnjaki po vsem svetu, je, da jo uvozite z vzdevkom pd. Ta preprost vzdevek naredi vašo kodo bolj berljivo in jedrnato.
import pandas as pd
import numpy as np # Pogosto se uporablja skupaj s Pandas, zato ga bomo uvozili tudi mi.
S to eno vrstico ste odklenili polno moč knjižnice Pandas. Sedaj pa preidimo k bistvu tega vodnika: ustvarjanju DataFrame-ov.
Osnovne metode ustvarjanja: Od preprostih do zapletenih
Konstruktor pd.DataFrame() je izjemno vsestranski. Sprejme lahko veliko različnih vrst vnosov. Sedaj bomo raziskali najpomembnejše metode, od najpogostejših do bolj specializiranih primerov.
1. Ustvarjanje DataFrame iz slovarja seznamov ali polj
To je verjetno najpogostejša in najbolj intuitivna metoda za ustvarjanje DataFrame-a. Začnete s Python slovarjem, kjer ključi postanejo imena stolpcev, vrednosti pa seznami (ali NumPy polja ali Pandas serije), ki vsebujejo podatke za vsak stolpec.
Kako deluje: Pandas preslika vsak ključ slovarja v glavo stolpca in vsak seznam vrednosti v vrstice tega stolpca. Ključna zahteva je, da vsi seznami morajo imeti enako dolžino, saj vsak seznam predstavlja celoten stolpec podatkov.
Primer:
Ustvarimo DataFrame, ki vsebuje informacije o različnih mestih po svetu.
# Podatki, organizirani po stolpcih
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Ustvarite DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Izhod:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 São Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
Ključno spoznanje: Ta metoda je popolna, kadar so vaši podatki naravno organizirani po značilnostih ali kategorijah. Je čista, berljiva in neposredno prevede strukturo vašega slovarja v tabelarično obliko.
2. Ustvarjanje DataFrame iz seznama slovarjev
Alternativna in enako zmogljiva metoda je uporaba seznama, kjer je vsak element slovar. V tej strukturi vsak slovar predstavlja eno vrstico, njegovi ključi pa predstavljajo imena stolpcev za podatke te vrstice.
Kako deluje: Pandas iterira skozi seznam. Za vsak slovar ustvari novo vrstico. Ključi slovarja se uporabijo za določitev stolpcev. Ta metoda je izjemno prilagodljiva, saj če v slovarju manjka ključ, bo Pandas samodejno zapolnil to celico v ustrezni vrstici z NaN (Not a Number), kar je standardni označevalec za manjkajoče podatke v Pandas.
Primer:
Predstavimo iste podatke o mestih, vendar tokrat strukturirane kot seznam zapisov.
# Podatki, organizirani po vrsticah (zapisih)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'São Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Upoštevajte drugačno strukturo
]
# Ustvarite DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Izhod:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 São Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Opazite, kako je Pandas elegantno obravnaval nedoslednosti. Vrednost 'Is_Coastal' za Šanghaj je NaN, ker je manjkala v njegovem slovarju. Nov stolpec 'Timezone' je bil ustvarjen za Kairo, z NaN za vsa druga mesta. To je odlična izbira za delo s pol-strukturiranimi podatki, kot so JSON odgovori iz API-jev.
Ključno spoznanje: To metodo uporabite, kadar vaši podatki pridejo kot serija zapisov ali opazovanj. Je robustna pri obravnavi manjkajočih podatkov in razlik v strukturi zapisov.
3. Ustvarjanje DataFrame iz NumPy polja
Za tiste, ki delajo v znanstvenem računalništvu, strojnem učenju ali katerem koli področju, ki vključuje obsežne numerične operacije, podatki pogosto izvirajo iz NumPy polj. Pandas je zgrajen na vrhu NumPy-ja, kar omogoča brezhibno in zelo učinkovito integracijo med obema knjižnicama.
Kako deluje: Konstruktorju pd.DataFrame() podate 2D NumPy polje. Privzeto bo Pandas ustvaril indekse in stolpce na podlagi celih števil. Vendar pa lahko (in bi morali) podati smiselne oznake z uporabo parametrov index in columns.
Primer:
Ustvarimo DataFrame iz naključno generiranega NumPy polja velikosti 5x4, ki predstavlja odčitke senzorjev skozi čas.
# Ustvarite 5x4 NumPy polje z naključnimi podatki
data_np = np.random.rand(5, 4)
# Določite oznake stolpcev in indeksa
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# Ustvarite DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Izhod (vaša naključna števila se bodo razlikovala):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
V tem primeru smo predstavili tudi zmogljivo funkcijo: uporabo DatetimeIndex za podatke časovnih vrst, kar odpira širok nabor zmožnosti analize na podlagi časa v knjižnici Pandas.
Ključno spoznanje: To je spominsko najučinkovitejša metoda za ustvarjanje DataFrame-a iz homogenih numeričnih podatkov. Je standardna izbira pri povezovanju s knjižnicami, kot so NumPy, Scikit-learn ali TensorFlow.
4. Ustvarjanje DataFrame iz seznama seznamov
Ta metoda je konceptualno podobna ustvarjanju iz NumPy polja, vendar uporablja standardne Python sezname. Je preprost način za pretvorbo tabelaričnih podatkov, shranjenih v obliki ugnezdenega seznama.
Kako deluje: Podate seznam, kjer vsak notranji seznam predstavlja vrstico podatkov. Tako kot pri NumPy poljih je zelo priporočljivo, da za jasnost določite imena stolpcev preko parametra columns.
Primer:
# Podatki kot seznam vrstic
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Določite imena stolpcev
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Ustvarite DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Izhod:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Ključno spoznanje: To je preprosta in učinkovita metoda, kadar so vaši podatki že strukturirani kot seznam vrstic, na primer pri branju iz datotečnega formata, ki nima glav.
Napredna inicializacija: Prilagajanje vašega DataFrame-a
Poleg posredovanja surovih podatkov, konstruktor pd.DataFrame() ponuja več parametrov za nadzor strukture in lastnosti vašega novega DataFrame-a že ob samem ustvarjanju.
Določanje indeksa
Parameter `index` smo že videli v akciji. Indeks je ključen del DataFrame-a, saj zagotavlja oznake za vrstice, ki se uporabljajo za hitro iskanje, poravnavo podatkov in več. Čeprav Pandas zagotavlja privzeti numerični indeks (0, 1, 2, ...), lahko nastavitev smiselnega indeksa močno olajša delo s podatki.
Primer: Ponovno uporabimo naš primer s slovarjem seznamov, vendar ob ustvarjanju nastavimo stolpec `City` kot indeks.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'São Paulo', 'Mumbai']
# Ustvarite DataFrame z indeksom po meri
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Izhod:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
São Paulo Brazil 22.4 False
Mumbai India 20.9 True
Sedaj lahko dostopate do podatkov vrstice z uporabo teh smiselnih oznak, na primer z df_with_index.loc['Tokyo'].
Nadzor podatkovnih tipov (`dtype`)
Pandas je precej dober pri sklepanju podatkovnih tipov (npr. prepoznavanje števil, besedila in logičnih vrednosti). Vendar pa je včasih treba vsiliti določen podatkovni tip za stolpec, da se zagotovi spominska učinkovitost ali omogočijo določene operacije. Parameter `dtype` vam omogoča ta nadzor.
Primer: Predstavljajte si, da imamo ID-je izdelkov, ki izgledajo kot števila, vendar bi jih morali obravnavati kot besedilo (nize).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Ustvarite DataFrame in določite dtype za 'ProductID'
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Izhod:
ProductID object Stock int32 dtype: object
Opazite, da je `str` v Pandas predstavljen kot `object`. Z eksplicitno nastavitvijo `dtype` preprečimo, da bi Pandas obravnaval `ProductID` kot število, kar bi lahko vodilo do napačnih izračunov ali težav pri razvrščanju. Uporaba bolj specifičnih celoštevilskih tipov, kot je `int32` namesto privzetega `int64`, lahko pri velikih naborih podatkov prihrani tudi precej pomnilnika.
Praktični scenariji in najboljše prakse
Izbira prave metode ustvarjanja je odvisna od izvorne oblike vaših podatkov. Tukaj je preprost vodnik za odločanje:
- So vaši podatki v stolpcih (npr. en seznam na značilnost)? Uporabite slovar seznamov. To se naravno prilega.
- So vaši podatki serija zapisov (npr. iz JSON API-ja)? Uporabite seznam slovarjev. Odličen je pri obravnavi manjkajočih ali dodatnih polj v zapisih.
- So vaši podatki numerični in v mreži (npr. iz znanstvenega izračuna)? Uporabite NumPy polje. To je najzmogljivejša možnost za ta primer uporabe.
- So vaši podatki v preprosti tabelarični obliki vrstico za vrstico brez glav? Uporabite seznam seznamov in posebej podajte imena stolpcev.
Pogoste napake, ki se jim je treba izogibati
- Neenake dolžine v slovarju seznamov: To je pogosta napaka. Pri ustvarjanju DataFrame-a iz slovarja seznamov mora imeti vsak seznam popolnoma enako število elementov. V nasprotnem primeru bo Pandas sprožil `ValueError`. Vedno zagotovite, da so vaši podatki v stolpcih enake dolžine pred ustvarjanjem.
- Ignoriranje indeksa: Zanašanje na privzeti indeks, ki se začne z 0, je v mnogih primerih v redu, toda če imajo vaši podatki naravni identifikator (kot je ID izdelka, ID uporabnika ali določen časovni žig), ga lahko z nastavitvijo kot indeksa že na začetku poenostavite kasnejšo kodo.
- Pozabljanje na podatkovne tipe: Dovoliti, da Pandas sklepa o tipih, večinoma deluje, vendar pri velikih naborih podatkov ali stolpcih z mešanimi tipi lahko pride do slabše zmogljivosti. Bodite proaktivni pri nastavljanju `dtype` za stolpce, ki jih je treba obravnavati kot kategorije, nize ali specifične numerične tipe, da prihranite pomnilnik in preprečite napake.
Onkraj inicializacije: Ustvarjanje DataFrame-ov iz datotek
Čeprav se ta vodnik osredotoča na ustvarjanje DataFrame-ov iz Python objektov v pomnilniku, je ključnega pomena vedeti, da bodo v večini resničnih scenarijev vaši podatki prišli iz zunanje datoteke. Pandas za ta namen ponuja nabor visoko optimiziranih bralnih funkcij, med drugim:
pd.read_csv(): Za datoteke z vrednostmi, ločenimi z vejico, delovni konj uvoza podatkov.pd.read_excel(): Za branje podatkov iz Microsoft Excel preglednic.pd.read_json(): Za branje podatkov iz JSON datotek ali nizov.pd.read_sql(): Za branje rezultatov poizvedbe v bazi podatkov neposredno v DataFrame.pd.read_parquet(): Za branje iz učinkovitega, stolpčno usmerjenega formata datotek Parquet.
Te funkcije so naslednji logični korak na vaši poti s Pandasom. Obvladovanje le-teh vam bo omogočilo, da vnesete podatke iz skoraj katerega koli vira v zmogljivo strukturo DataFrame.
Zaključek: Vaš temelj za obvladovanje podatkov
Pandas DataFrame je osrednja podatkovna struktura za vsako resno delo s podatki v Pythonu. Kot smo videli, Pandas ponuja prilagodljiv in intuitiven nabor orodij za inicializacijo teh struktur iz širokega nabora formatov. Z razumevanjem, kako ustvariti DataFrame iz slovarjev, seznamov in NumPy polj, ste zgradili trden temelj za svoje projekte podatkovne analize.
Ključno je, da izberete metodo, ki se najbolje ujema z izvorno strukturo vaših podatkov. To ne samo, da naredi vašo kodo čistejšo in bolj berljivo, ampak tudi bolj učinkovito. Od tu naprej ste pripravljeni, da se premaknete k vznemirljivim nalogam čiščenja, raziskovanja, preoblikovanja in vizualizacije podatkov. Srečno kodiranje!