Įvaldykite Pandas DataFrame kūrimo meną. Šis vadovas apima DataFrame inicializavimą iš žodynų, sąrašų, NumPy masyvų ir kt. pasaulio duomenų profesionalams.
Pandas DataFrame kūrimas: nuodugni duomenų struktūros inicializavimo analizė
Sveiki atvykę į duomenų manipuliavimo pasaulį su Python! Beveik kiekvieno duomenų analizės uždavinio širdyje slypi Pandas biblioteka, o jos kertinis akmuo yra DataFrame. Pagalvokite apie DataFrame kaip apie protingą, galingą ir lanksčią skaičiuoklės ar duomenų bazės lentelės versiją, esančią tiesiai jūsų Python aplinkoje. Tai pagrindinė priemonė duomenims valyti, transformuoti, analizuoti ir vizualizuoti. Tačiau prieš atlikdami bet kokią duomenų magiją, pirmiausia turite įvaldyti DataFrame kūrimo meną. Tai, kaip inicializuojate šią pagrindinę duomenų struktūrą, gali nulemti visos jūsų analizės eigą.
Šis išsamus vadovas skirtas pasaulinei pradedančiųjų ir praktikų duomenų analitikų, mokslininkų ir inžinierių auditorijai. Mes išnagrinėsime dažniausius ir galingiausius Pandas DataFrame kūrimo metodus nuo nulio. Nesvarbu, ar jūsų duomenys yra žodyne, sąraše, NumPy masyve ar kitame formatu, šis straipsnis suteiks jums žinių ir praktinių pavyzdžių, kaip su pasitikėjimu ir efektyvumu inicializuoti savo DataFrame. Pradėkime statyti mūsų pamatus.
Kas tiksliai yra Pandas DataFrame?
Prieš pradėdami kurti, patikslinkime, ką statome. Pandas DataFrame yra dvimatis, dydžio keičiamas ir potencialiai heterogeniškas lentelės formos duomenų struktūra. Panagrinėkime tai:
- Dvimatis: Jis turi eiles ir stulpelius, kaip ir skaičiuoklė.
- Dydžio keičiamas: Galite pridėti arba pašalinti eiles ir stulpelius po to, kai DataFrame buvo sukurtas.
- Heterogeniškas: Stulpeliai gali turėti skirtingus duomenų tipus. Pavyzdžiui, viename stulpelyje gali būti skaičiai (sveikieji ar dešimtainiai), kitame – tekstas (eilutės), o trečiame – datos ar loginės reikšmės (True/False).
DataFrame turi tris pagrindinius komponentus:
- Duomenys: Faktinės reikšmės, saugomos struktūroje, organizuotos eilutėmis ir stulpeliais.
- Indeksas: Eilučių etiketės. Jei nenurodysite indekso, Pandas sukurs numatytąjį, prasidedantį nuo 0. Indeksas suteikia galingą būdą pasiekti ir suderinti duomenis.
- Stulpeliai: Stulpelių etiketės. Jie yra labai svarbūs norint pasiekti konkrečias duomenų serijas DataFrame viduje.
Suprasti šią struktūrą yra raktas į efektyvų DataFrame kūrimo ir manipuliavimo supratimą.
Pamatai: Pandas importavimas
Pirmiausia. Norėdami naudoti Pandas, turite importuoti biblioteką į savo Python scenarijų ar užrašų knygelę. Universaliai pripažinta praktika, kurios laikosi profesionalai visame pasaulyje, yra importuoti ją su pseudonimu pd. Šis paprastas pseudonimas daro jūsų kodą perskaitomesnį ir glaustesnį.
import pandas as pd
import numpy as np # Dažnai naudojamas kartu su Pandas, todėl importuosime ir jį.
Šia vienintele eilute atvėrėte visą Pandas bibliotekos galią. Dabar pereikime prie šio vadovo esmės: DataFrame kūrimo.
Pagrindiniai kūrimo metodai: nuo paprastų iki sudėtingų
pd.DataFrame() konstruktorius yra nepaprastai universalus. Jis gali priimti daugybę skirtingų tipų įvesties. Dabar išnagrinėsime svarbiausius metodus, pereidami nuo dažniausių prie specifinių atvejų.
1. DataFrame kūrimas iš žodyno, kuriame yra sąrašai arba masyvai
Tai, ko gero, dažniausias ir intuityviausias DataFrame kūrimo metodas. Jūs pradedate su Python žodynu, kur raktai taps stulpelių pavadinimais, o reikšmės bus sąrašai (arba NumPy masyvai, ar Pandas serijos), kuriuose bus kiekvieno stulpelio duomenys.
Kaip tai veikia: Pandas susieja kiekvieną žodyno raktą su stulpelio antrašte, o kiekvieną reikšmių sąrašą – su to stulpelio eilutėmis. Pagrindinis šios vietos reikalavimas yra tas, kad visi sąrašai turi turėti tą patį ilgį, nes kiekvienas sąrašas atstovauja visą stulpelio duomenų rinkinį.
Pavyzdys:
Sukurkime DataFrame, kuriame būtų informacija apie įvairius miestus visame pasaulyje.
# Duomenys organizuoti pagal stulpelį
city_data = {
'City': ['Tokijas', 'Delis', 'Šanchajus', 'San Paulas', 'Mumbajus'],
'Country': ['Japonija', 'Indija', 'Kinija', 'Brazilija', 'Indija'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Sukurti DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Rezultatas:
City Country Population_Millions Is_Coastal
0 Tokijas Japonija 37.3 True
1 Delis Indija 32.0 False
2 Šanchajus Kinija 28.5 True
3 San Paulas Brazilija 22.4 False
4 Mumbajus Indija 20.9 True
Pagrindinė išvada: Šis metodas puikiai tinka, kai jūsų duomenys yra natūraliai organizuoti pagal požymį ar kategoriją. Jis yra švarus, perskaitomas ir tiesiogiai paverčia jūsų žodyno struktūrą lentelės formatu.
2. DataFrame kūrimas iš žodynų sąrašo
Alternatyvus ir vienodai galingas metodas yra naudoti sąrašą, kur kiekvienas elementas yra žodynas. Šioje struktūroje kiekvienas žodynas atstovauja vieną eilutę, o jo raktai atstovauja tos eilutės duomenų stulpelių pavadinimus.
Kaip tai veikia: Pandas pereina per sąrašą. Kiekvienam žodynui jis sukuria naują eilutę. Žodyno raktai naudojami stulpeliams nustatyti. Šis metodas yra nepaprastai lankstus, nes jei žodyne trūksta rakto, Pandas automatiškai užpildys tą langelį atitinkamoje eilutėje su NaN (Not a Number), kuris yra standartinis trūkstamų duomenų žymeklis Pandas.
Pavyzdys:
Pavaizduokime tuos pačius miesto duomenis, bet šį kartą struktūrizuotus kaip įrašų sąrašą.
# Duomenys organizuoti pagal eilutę (įrašas)
records_data = [
{'City': 'Tokijas', 'Country': 'Japonija', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delis', 'Country': 'Indija', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Šanchajus', 'Country': 'Kinija', 'Population_Millions': 28.5},
{'City': 'San Paulas', 'Country': 'Brazilija', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Kairas', 'Country': 'Egiptas', 'Timezone': 'EET'} # Pastaba: skirtinga struktūra
]
# Sukurti DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Rezultatas:
City Country Population_Millions Is_Coastal Timezone
0 Tokijas Japonija 37.3 True NaN
1 Delis Indija 32.0 False NaN
2 Šanchajus Kinija 28.5 NaN NaN
3 San Paulas Brazilija 22.4 False NaN
4 Kairas Egiptas NaN NaN EET
Pastebėkite, kaip Pandas gražiai susitvarkė su neatitikimais. Šanchajaus 'Is_Coastal' reikšmė yra NaN, nes jos trūko jo žodyne. Kairui buvo sukurtas naujas 'Timezone' stulpelis, o visiems kitiems miestams reikšmės buvo NaN. Tai daro jį puikiu pasirinkimu dirbant su pusiau struktūrizuotais duomenimis, tokiais kaip API atsakymai JSON formatu.
Pagrindinė išvada: Naudokite šį metodą, kai jūsų duomenys gaunami kaip įrašų ar stebėjimų serija. Jis yra atsparus trūkstamiems duomenims ir įrašų struktūros skirtumams.
3. DataFrame kūrimas iš NumPy masyvo
Tiems, kurie dirba su moksliniu skaičiavimu, mašininiu mokymusi ar bet kuria sritimi, susijusia su intensyviomis skaitinėmis operacijomis, duomenys dažnai kyla iš NumPy masyvų. Pandas yra pastatyta ant NumPy, todėl integracija tarp jų yra sklandi ir labai efektyvi.
Kaip tai veikia: Jūs perduodate 2D NumPy masyvą pd.DataFrame() konstruktoriui. Pagal nutylėjimą Pandas sukurs sveikaisiais skaičiais pagrįstus indeksus ir stulpelius. Tačiau jūs galite (ir turėtumėte) pateikti prasmingus etikečių pavadinimus naudodami index ir columns parametrus.
Pavyzdys:
Sukurkime DataFrame iš atsitiktinai sugeneruoto 5x4 NumPy masyvo, atstovaujančio jutiklių rodmenis laiko eigoje.
# Sukurti 5x4 NumPy masyvą su atsitiktiniais duomenimis
data_np = np.random.rand(5, 4)
# Nustatyti stulpelių ir indeksų etikečių pavadinimus
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'])
# Sukurti DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Rezultatas (jūsų atsitiktiniai skaičiai skirsis):
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
Šiame pavyzdyje taip pat pristatėme galingą funkciją: DatetimeIndex naudojimą laiko serijų duomenims, o tai atveria daugybę laiko pagrindu atliekamų analizių galimybių Pandas.
Pagrindinė išvada: Tai yra efektyviausias metodas kuriant DataFrame iš homogeniškų skaitinių duomenų. Tai standartinis pasirinkimas sąveikaujant su tokiomis bibliotekomis kaip NumPy, Scikit-learn ar TensorFlow.
4. DataFrame kūrimas iš sąrašų sąrašo
Šis metodas konceptualiai panašus į kūrimą iš NumPy masyvo, tačiau naudoja standartinius Python sąrašus. Tai paprastas būdas konvertuoti lentelės formos duomenis, saugomus įdėtų sąrašų formatu.
Kaip tai veikia: Jūs pateikiate sąrašą, kuriame kiekvienas vidinis sąrašas atstovauja eilutę duomenų. Kaip ir su NumPy masyvais, labai rekomenduojama aiškumo dėlei nurodyti stulpelių pavadinimus per columns parametrą.
Pavyzdys:
# Duomenys kaip eilučių sąrašas
product_data = [
['P001', 'Nešiojamas kompiuteris', 1200.00, 'Elektronika'],
['P002', 'Pelė', 25.50, 'Elektronika'],
['P003', 'Biuro kėdė', 150.75, 'Baldai'],
['P004', 'Klaviatūra', 75.00, 'Elektronika']
]
# Nustatyti stulpelių pavadinimus
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Sukurti DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Rezultatas:
ProductID ProductName Price_USD Category 0 P001 Nešiojamas kompiuteris 1200.00 Elektronika 1 P002 Pelė 25.50 Elektronika 2 P003 Biuro kėdė 150.75 Baldai 3 P004 Klaviatūra 75.00 Elektronika
Pagrindinė išvada: Tai paprastas ir efektyvus metodas, kai jūsų duomenys jau yra struktūrizuoti kaip eilučių sąrašas, pavyzdžiui, skaitant iš failo, kuriame nėra antraščių.
Išplėstinis inicializavimas: DataFrame tinkinimas
Be žalių duomenų pateikimo, pd.DataFrame() konstruktorius siūlo kelis parametrus, leidžiančius kontroliuoti naujojo DataFrame struktūrą ir savybes nuo pat jo sukūrimo momento.
Indekso nustatymas
Mes jau matėme `index` parametrą veikime. Indeksas yra svarbi DataFrame dalis, suteikianti eilučių etiketes, kurios naudojamos greitam paieškai, duomenų suderinimui ir kt. Nors Pandas suteikia numatytąjį skaitinį indeksą (0, 1, 2, ...), prasmingo indekso nustatymas gali padaryti jūsų duomenis daug lengviau valdomus.
Pavyzdys: Pakartokime mūsų žodyno su sąrašais pavyzdį, bet nustatysime `City` stulpelį kaip indeksą sukūrimo metu.
city_data = {
'Country': ['Japonija', 'Indija', 'Kinija', 'Brazilija', 'Indija'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokijas', 'Delis', 'Šanchajus', 'San Paulas', 'Mumbajus']
# Sukurti DataFrame su pasirinktiniu indeksu
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Rezultatas:
Country Population_Millions Is_Coastal
Tokijas Japonija 37.3 True
Delis Indija 32.0 False
Šanchajus Kinija 28.5 True
San Paulas Brazilija 22.4 False
Mumbajus Indija 20.9 True
Dabar galite pasiekti eilučių duomenis naudodami šias prasmingas etiketes, pavyzdžiui, su df_with_index.loc['Tokijas'].
Duomenų tipų kontrolė (`dtype`)
Pandas gana gerai atpažįsta duomenų tipus (pvz., atpažįsta skaičius, tekstą ir loginės reikšmes). Tačiau kartais reikia priversti naudoti konkretų duomenų tipą stulpeliui, siekiant užtikrinti atminties efektyvumą arba leisti atlikti specifines operacijas. `dtype` parametras suteikia jums šią kontrolę.
Pavyzdys: Įsivaizduokime, kad turime produktų ID, kurie atrodo kaip skaičiai, bet turėtų būti traktuojami kaip tekstas (eilutės).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Sukurti DataFrame, nustatant 'ProductID' dtype
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Rezultatas:
ProductID object Stock int32 dtype: object
Pastebėkite, kad Pandas `str` yra vaizduojamas kaip `object`. Aiškiai nustatę `dtype`, mes neleidžiame Pandas traktuoti `ProductID` kaip skaičių, o tai gali sukelti neteisingus skaičiavimus ar rūšiavimo problemas vėliau. Naudojant specifinius integer tipus, tokius kaip `int32` vietoj numatytojo `int64`, taip pat galima sutaupyti daug atminties su dideliais duomenų rinkiniais.
Praktiniai scenarijai ir geriausios praktikos
Tinkamo kūrimo metodo pasirinkimas priklauso nuo jūsų duomenų pradinės formos. Štai paprastas sprendimų vadovas:
- Ar jūsų duomenys yra stulpeliuose (pvz., vienas sąrašas kiekvienam požymiui)? Naudokite žodyną su sąrašais. Tai natūralus pasirinkimas.
- Ar jūsų duomenys yra įrašų serija (pvz., iš JSON API)? Naudokite žodynų sąrašą. Jis puikiai tvarko trūkstamus ar papildomus laukus įrašuose.
- Ar jūsų duomenys yra skaitiniai ir lentelės formos (pvz., iš mokslinio skaičiavimo)? Naudokite NumPy masyvą. Tai yra našiausias pasirinkimas šiam naudojimo atvejui.
- Ar jūsų duomenys yra paprastos lentelės formos eilutė po eilutės be antraščių? Naudokite sąrašų sąrašą ir atskirai pateikite stulpelių pavadinimus.
Dažnos klaidos, kurių reikia vengti
- Nelygūs ilgiai žodyne su sąrašais: Tai dažna klaida. Kuriant DataFrame iš žodyno su sąrašais, visi sąrašai turi turėti tiksliai tą patį elementų skaičių. Jei ne, Pandas išmes `ValueError`. Visada įsitikinkite, kad jūsų stulpelių duomenys yra lygūs prieš kūrimą.
- Indekso ignoravimas: Pasikliauti numatytuoju 0-pradžios indeksu yra gerai daugeliu atvejų, bet jei jūsų duomenyse yra natūralus identifikatorius (pvz., Produkto ID, Vartotojo ID ar konkreti laiko žyma), jo nustatymas kaip indekso nuo pat pradžių gali supaprastinti jūsų kodą vėliau.
- Duomenų tipų pamiršimas: Leidimas Pandas atpažinti tipus dažniausiai veikia, tačiau su dideliais duomenų rinkiniais ar mišrių tipų stulpeliais našumas gali suprastėti. Būkite iniciatyvūs nustatydami `dtype` stulpeliams, kurie turi būti traktuojami kaip kategoriniai, eilutės arba specifiniai skaitiniai tipai, kad sutaupytumėte atminties ir išvengtumėte klaidų.
Po inicializavimo: DataFrame kūrimas iš failų
Nors šis vadovas sutelkia dėmesį į DataFrame kūrimą iš Python objektų atmintyje, svarbu žinoti, kad daugumoje realaus pasaulio scenarijų jūsų duomenys ateis iš išorinio failo. Pandas suteikia rinkinį labai optimizuotų skaitytuvų funkcijų šiam tikslui, įskaitant:
pd.read_csv(): Skirta skirtukais atskirtų reikšmių (CSV) failams, pagrindinė duomenų importavimo priemonė.pd.read_excel(): Skirta skaityti duomenis iš Microsoft Excel skaičiuoklių.pd.read_json(): Skirta skaityti duomenis iš JSON failų ar eilučių.pd.read_sql(): Skirta tiesiogiai skaityti duomenų bazės užklausos rezultatus į DataFrame.pd.read_parquet(): Skirta skaityti iš efektyvaus, stulpelių orientuoto Parquet failo formato.
Šios funkcijos yra kitas logiškas žingsnis jūsų Pandas kelionėje. Jų įvaldymas leis jums įkelti duomenis iš beveik bet kurio šaltinio į galingą DataFrame struktūrą.
Išvada: Jūsų pamatai duomenų meistriškumui
Pandas DataFrame yra centrinė duomenų struktūra bet kokiam rimtam duomenų darbui su Python. Kaip matėme, Pandas siūlo lankstų ir intuityvų įrankių rinkinį šių struktūrų inicializavimui iš daugybės formatų. Suprasdami, kaip sukurti DataFrame iš žodynų, sąrašų ir NumPy masyvų, sukūrėte tvirtą pagrindą savo duomenų analizės projektams.
Svarbiausia yra pasirinkti metodą, kuris geriausiai atitinka jūsų duomenų pradinę struktūrą. Tai ne tik padarys jūsų kodą švaresnį ir perskaitomesnį, bet ir efektyvesnį. Nuo čia esate pasirengę pereiti prie įdomių duomenų valymo, tyrinėjimo, transformavimo ir vizualizavimo užduočių. Sėkmingo kodavimo!