Osvojte si umění vytváření Pandas DataFrame. Tato příručka se zabývá inicializací DataFrames ze slovníků, seznamů, polí NumPy a dalších pro globální datové profesionály.
Vytváření Pandas DataFrame: Hluboký ponor do inicializace datových struktur
Vítejte ve světě manipulace s daty pomocí Pythonu! Jádrem téměř každé úlohy analýzy dat je knihovna Pandas a jejím základním kamenem je DataFrame. Představte si DataFrame jako chytrou, výkonnou a flexibilní verzi tabulky nebo databázové tabulky, která žije přímo ve vašem prostředí Python. Je to primární nástroj pro čištění, transformaci, analýzu a vizualizaci dat. Než však budete moci provádět jakoukoli z těchto datových kouzel, musíte nejprve ovládnout umění vytváření DataFrame. Způsob, jakým inicializujete tuto základní datovou strukturu, může připravit půdu pro celou vaši analýzu.
Tato komplexní příručka je určena pro globální publikum začínajících a praktikujících datových analytiků, vědců a inženýrů. Prozkoumáme nejběžnější a nejvýkonnější metody pro vytváření Pandas DataFrames od začátku. Ať už jsou vaše data ve slovníku, seznamu, poli NumPy nebo jiném formátu, tento článek vám poskytne znalosti a praktické příklady pro inicializaci vašich DataFrames s jistotou a efektivitou. Pojďme vybudovat náš základ.
Co přesně je Pandas DataFrame?
Než začneme stavět, objasněme si, co konstruujeme. Pandas DataFrame je dvourozměrná, velikostně proměnlivá a potenciálně heterogenní tabulková datová struktura. Pojďme si to rozebrat:
- Dvourozměrná: Má řádky a sloupce, stejně jako tabulka.
- Velikostně proměnlivá: Po vytvoření DataFrame můžete přidávat nebo odebírat řádky a sloupce.
- Heterogenní: Sloupce mohou mít různé datové typy. Například jeden sloupec může obsahovat čísla (celá čísla nebo desetinná čísla), druhý může obsahovat text (řetězce) a třetí může obsahovat data nebo booleovské hodnoty (True/False).
DataFrame má tři hlavní komponenty:
- Data: Skutečné hodnoty uložené ve struktuře, uspořádané v řádcích a sloupcích.
- Index: Popisky pro řádky. Pokud nezadáte index, Pandas vytvoří výchozí index počínaje 0. Index poskytuje výkonný způsob přístupu k datům a jejich zarovnání.
- Sloupce: Popisky pro sloupce. Ty jsou zásadní pro přístup ke konkrétním datovým řadám v rámci DataFrame.
Pochopení této struktury je klíčem k pochopení, jak efektivně vytvářet a manipulovat s DataFrames.
Základ: Import Pandas
Nejprve to nejdůležitější. Chcete-li používat Pandas, musíte importovat knihovnu do svého skriptu nebo notebooku Python. Univerzálně přijímaná konvence, kterou se řídí profesionálové po celém světě, je importovat ji s aliasem pd. Tento jednoduchý alias činí váš kód čitelnějším a stručnějším.
import pandas as pd
import numpy as np # Často se používá společně s Pandas, takže ji také importujeme.
S tímto jediným řádkem jste odemkli plnou sílu knihovny Pandas. Nyní se pojďme dostat k jádru této příručky: vytváření DataFrames.
Základní metody vytváření: Od jednoduchých po složité
Konstruktor pd.DataFrame() je neuvěřitelně univerzální. Může přijímat mnoho různých typů vstupů. Nyní prozkoumáme nejdůležitější metody, postupující od nejběžnějších k specializovanějším případům.
1. Vytvoření DataFrame ze slovníku seznamů nebo polí
Toto je pravděpodobně nejběžnější a nejintuitivnější metoda pro vytvoření DataFrame. Začnete se slovníkem Pythonu, kde se klíče stanou názvy sloupců a hodnoty budou seznamy (nebo pole NumPy nebo Pandas Series) obsahující data pro každý sloupec.
Jak to funguje: Pandas mapuje každý klíč slovníku na záhlaví sloupce a každý seznam hodnot na řádky tohoto sloupce. Zásadní požadavek je, že všechny seznamy musí mít stejnou délku, protože každý seznam představuje celý sloupec dat.
Příklad:
Vytvořme DataFrame obsahující informace o různých městech po celém světě.
# Data uspořádaná podle sloupce
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]
}
# Vytvořte DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Výstup:
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
Klíčové poznatky: Tato metoda je ideální, když jsou vaše data přirozeně uspořádána podle funkce nebo kategorie. Je čistá, čitelná a přímo překládá strukturu vašeho slovníku do tabulkového formátu.
2. Vytvoření DataFrame ze seznamu slovníků
Alternativní a stejně výkonná metoda je použití seznamu, kde každý prvek je slovník. V této struktuře každý slovník představuje jeden řádek a jeho klíče představují názvy sloupců pro data tohoto řádku.
Jak to funguje: Pandas iteruje seznamem. Pro každý slovník vytvoří nový řádek. Klíče slovníku se používají k určení sloupců. Tato metoda je neuvěřitelně flexibilní, protože pokud slovníku chybí klíč, Pandas automaticky vyplní tuto buňku v odpovídajícím řádku pomocí NaN (Not a Number), což je standardní značka pro chybějící data v Pandas.
Příklad:
Pojďme reprezentovat stejná data o městech, ale tentokrát strukturovaná jako seznam záznamů.
# Data uspořádaná podle řádku (záznamu)
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'} # Všimněte si odlišné struktury
]
# Vytvořte DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Výstup:
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
Všimněte si, jak Pandas elegantně zvládl nekonzistence. Hodnota 'Is_Coastal' pro Shanghai je NaN, protože chyběla v jeho slovníku. Pro Káhiru byl vytvořen nový sloupec 'Timezone' s hodnotou NaN pro všechna ostatní města. Díky tomu je vynikající volbou pro práci s polostrukturovanými daty, jako jsou odpovědi JSON z rozhraní API.
Klíčové poznatky: Použijte tuto metodu, když vaše data přicházejí jako série záznamů nebo pozorování. Je robustní při zpracování chybějících dat a variací ve struktuře záznamů.
3. Vytvoření DataFrame z pole NumPy
Pro ty, kteří pracují ve vědeckém výpočtu, strojovém učení nebo v jakékoli oblasti zahrnující těžké numerické operace, data často pocházejí z polí NumPy. Pandas je postaven na NumPy, díky čemuž je integrace mezi těmito dvěma bezproblémová a vysoce efektivní.
Jak to funguje: Předáte 2D pole NumPy konstruktoru pd.DataFrame(). Ve výchozím nastavení Pandas vytvoří indexy a sloupce založené na celých číslech. Můžete však (a měli byste) poskytnout smysluplné popisky pomocí parametrů index a columns.
Příklad:
Vytvořme DataFrame z náhodně generovaného pole NumPy 5x4, které představuje odečty senzorů v průběhu času.
# Vytvořte pole NumPy 5x4 s náhodnými daty
data_np = np.random.rand(5, 4)
# Definujte popisky sloupců a indexů
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'])
# Vytvořte DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Výstup (vaše náhodná čísla se budou lišit):
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 tomto příkladu jsme také představili výkonnou funkci: použití DatetimeIndex pro data časových řad, která odemyká širokou škálu možností analýzy založené na čase v Pandas.
Klíčové poznatky: Toto je nejefektivnější metoda z hlediska paměti pro vytvoření DataFrame z homogenních numerických dat. Je to standardní volba při interakci s knihovnami jako NumPy, Scikit-learn nebo TensorFlow.
4. Vytvoření DataFrame ze seznamu seznamů
Tato metoda je koncepčně podobná vytváření z pole NumPy, ale používá standardní seznamy Pythonu. Je to přímočarý způsob, jak převést tabulková data uložená ve formátu vnořeného seznamu.
Jak to funguje: Poskytnete seznam, kde každý vnitřní seznam představuje řádek dat. Stejně jako u polí NumPy se důrazně doporučuje zadat názvy sloupců prostřednictvím parametru columns pro přehlednost.
Příklad:
# Data jako seznam řádků
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Definujte názvy sloupců
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Vytvořte DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Výstup:
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
Klíčové poznatky: Toto je jednoduchá a efektivní metoda, když jsou vaše data již strukturována jako seznam řádků, například při čtení ze souborového formátu, který nemá záhlaví.
Pokročilá inicializace: Přizpůsobení DataFrame
Kromě poskytování nezpracovaných dat nabízí konstruktor pd.DataFrame() několik parametrů pro řízení struktury a vlastností vašeho nového DataFrame od okamžiku jeho vytvoření.
Zadání indexu
Už jsme viděli parametr `index` v akci. Index je zásadní součástí DataFrame, který poskytuje popisky pro řádky, které se používají pro rychlé vyhledávání, zarovnání dat a další. Zatímco Pandas poskytuje výchozí číselný index (0, 1, 2, ...), nastavení smysluplného indexu může usnadnit práci s daty.
Příklad: Pojďme znovu použít náš příklad slovníku seznamů, ale při vytváření nastavíme sloupec `City` jako index.
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']
# Vytvořte DataFrame s vlastním indexem
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Výstup:
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
Nyní můžete přistupovat k datům řádků pomocí těchto smysluplných popisků, například pomocí df_with_index.loc['Tokyo'].
Řízení datových typů (`dtype`)
Pandas je docela dobrý v odvozování datových typů (např. rozpoznávání čísel, textu a booleovských hodnot). Někdy však musíte vynutit konkrétní datový typ pro sloupec, abyste zajistili efektivitu paměti nebo povolili konkrétní operace. Parametr `dtype` vám dává tuto kontrolu.
Příklad: Představte si, že máme ID produktů, která vypadají jako čísla, ale měla by být považována za text (řetězce).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Vytvořte DataFrame a zároveň zadejte dtype pro 'ProductID'
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Výstup:
ProductID object Stock int32 dtype: object
Všimněte si, že `str` v Pandas je reprezentován jako `object`. Explicitním nastavením `dtype` zabráníme Pandas, aby považoval `ProductID` za číslo, což by mohlo vést k nesprávným výpočtům nebo problémům s tříděním v budoucnu. Použití konkrétnějších celočíselných typů, jako je `int32`, namísto výchozího `int64` může také ušetřit značné množství paměti u velkých datových sad.
Praktické scénáře a osvědčené postupy
Výběr správné metody vytváření závisí na původním formátu vašich dat. Zde je jednoduchý rozhodovací průvodce:
- Jsou vaše data ve sloupcích (např. jeden seznam pro funkci)? Použijte slovník seznamů. Je to přirozené řešení.
- Jsou vaše data série záznamů (např. z rozhraní JSON API)? Použijte seznam slovníků. Vyniká při zpracování chybějících nebo dalších polí v záznamech.
- Jsou vaše data numerická a v mřížce (např. z vědeckého výpočtu)? Použijte pole NumPy. Je to nejvýkonnější možnost pro tento případ použití.
- Jsou vaše data v jednoduchém formátu tabulky řádek po řádku bez záhlaví? Použijte seznam seznamů a zadejte názvy sloupců samostatně.
Běžné nástrahy, kterým je třeba se vyhnout
- Nerovnoměrné délky ve slovníku seznamů: Toto je běžná chyba. Při vytváření DataFrame ze slovníku seznamů musí mít každý seznam přesně stejný počet prvků. Pokud ne, Pandas vyvolá `ValueError`. Vždy se ujistěte, že data sloupce mají stejnou délku před vytvořením.
- Ignorování indexu: Spoléhání se na výchozí index založený na 0 je v pořádku pro mnoho případů, ale pokud mají vaše data přirozený identifikátor (jako je ID produktu, ID uživatele nebo konkrétní časové razítko), nastavení jako indexu od začátku může později zjednodušit váš kód.
- Zapomenutí datových typů: Nechání Pandas odvodit typy funguje většinu času, ale u velkých datových sad nebo sloupců se smíšenými typy může dojít ke snížení výkonu. Buďte aktivní při nastavování `dtype` pro sloupce, které je třeba považovat za kategorie, řetězce nebo konkrétní číselné typy, abyste ušetřili paměť a zabránili chybám.
Kromě inicializace: Vytváření DataFrames ze souborů
Zatímco se tato příručka zaměřuje na vytváření DataFrames z objektů Python v paměti, je důležité vědět, že ve většině scénářů reálného světa budou vaše data pocházet z externího souboru. Pandas poskytuje sadu vysoce optimalizovaných funkcí pro čtení pro tento účel, včetně:
pd.read_csv(): Pro soubory s hodnotami oddělenými čárkami, tahoun importu dat.pd.read_excel(): Pro čtení dat z tabulek Microsoft Excel.pd.read_json(): Pro čtení dat ze souborů JSON nebo řetězců.pd.read_sql(): Pro čtení výsledků databázového dotazu přímo do DataFrame.pd.read_parquet(): Pro čtení z efektivního formátu souborů Parquet orientovaného na sloupce.
Tyto funkce jsou dalším logickým krokem ve vaší cestě Pandas. Zvládnutí vám umožní ingestovat data prakticky z jakéhokoli zdroje do výkonné struktury DataFrame.
Závěr: Váš základ pro zvládnutí dat
Pandas DataFrame je centrální datová struktura pro jakoukoli seriózní datovou práci v Pythonu. Jak jsme viděli, Pandas nabízí flexibilní a intuitivní sadu nástrojů pro inicializaci těchto struktur z široké škály formátů. Pochopením, jak vytvořit DataFrame ze slovníků, seznamů a polí NumPy, jste si vybudovali solidní základ pro své projekty analýzy dat.
Klíčem je vybrat metodu, která nejlépe odpovídá původní struktuře vašich dat. To nejenže učiní váš kód čistším a čitelnějším, ale také efektivnějším. Odtud jste připraveni přejít k vzrušujícím úkolům čištění dat, průzkumu, transformace a vizualizace. Šťastné kódování!