Python Výukový program Pandas: DataFrame, rozsah dat a použití
⚡ Chytré shrnutí
Pandas je open-source Python knihovna pro manipulaci s tabulkovými daty. Poskytuje struktury Series a DataFrame, rozsahy dat, pomocné funkce pro kontrolu a operace slice, drop, concatenate, seřazení a přejmenování demonstrované v tomto návodu.

V čem jsou pandy Python?
Pandy je open-source knihovna, která umožňuje manipulaci s daty a jejich analýzu v Python, který zahrnuje jak numerické tabulky, tak časové řady. Poskytuje snadný způsob, jak vytvářet, manipulovat a zpracovávat data a je postaven na nemotorný, takže pro fungování Pandy musí být přítomen NumPy.
Proč používat Pandy?
Datoví vědci využívají Pandy v Python pro následující výhody:
- Snadno si poradí s chybějícími daty
- Používá Series pro jednorozměrná data a DataFrame pro vícerozměrná data.
- Poskytuje efektivní způsob dělení dat
- Poskytuje flexibilní způsob, jak sloučit, zřetězit nebo přetvořit data
- Obsahuje výkonnou sadu nástrojů pro časové řady
Stručně řečeno, Pandas poskytuje výkonné a snadno použitelné datové struktury a také prostředky pro jejich rychlou práci, a proto je základem většiny... Python analýza dat práce.
Jak nainstalovat Pandy
Pandas se dodává s Anacondou a většinou služeb spravovaných notebooků, takže je obvykle již nainstalován. Pokud import selže, přidá jej jeden z níže uvedených příkazů. Vestavěné prostředí Jak nainstalovat TensorFlow obsahuje také pandy.
- pip:
pip install pandas - Anakonda:
conda install -c anaconda pandas - Uvnitř a Jupyter zápisník buňka:
import sys !conda install --yes --prefix {sys.prefix} pandas
Co je Pandas DataFrame?
Pandas DataFrame je dvourozměrná datová struktura s popisky, jejíž sloupce mohou obsahovat různé typy. Je to standardní způsob ukládání dat v tabulkovém formátu: řádky obsahují pozorování a sloupce pojmenovávají informace. Například cena může být název sloupce a 2, 3, 4 mohou být hodnoty cen.
Datové rámce jsou statistikům a dalším datovým odborníkům dobře známé. Obrázek níže ukazuje tento tvar – označený index řádku po straně a pojmenované sloupce nahoře.
Co je série?
Struktura Series je jednorozměrná datová struktura. Může obsahovat libovolný datový typ, například celé číslo, číslo s plovoucí čárkou nebo řetězec, a je užitečná, když chcete provést výpočet nebo vrátit jednorozměrné pole. Struktura Series podle definice nemůže mít více sloupců; v takovém případě použijte strukturu DataFrame.
Konstruktor Pandas Series přijímá následující parametry:
- Datum: může být seznam, slovník nebo skalární hodnota
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Můžete přidat index pomocí indexPojmenovává řádky a jeho délka se musí rovnat velikosti sloupce.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Níže vytvoříte sérii Pandas s chybějící hodnotou ve třetím řádku. Chybějící hodnoty v Python jsou zobrazeny jako NaN, a np.nan z NumPy ho uměle vytvoří.
pd.Series([1,2,np.nan])
Výstup
0 1.0 1 2.0 2 NaN dtype: float64
Vytvořte Pandas DataFrame
Pole NumPy můžete převést na DataFrame pomocí pd.DataFrame()Opak je také možný: pro převod DataFrame zpět do pole použijte np.array()nebo df.to_numpy(), což doporučuje aktuální dokumentace Pandas.
## 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]]
Slovník funguje stejně dobře jako vstup pro pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| věk | Jméno | |
|---|---|---|
| 0 | 30 | Jan |
| 1 | 40 | kovář |
Údaje o dosahu pand
Pandas má praktické API pro vytváření rozsahu dat, který se stane indexem časové řady. Volání má tuto podobu:
pd.date_range(start, periods, freq):
- Prvním parametrem je počáteční datum
- Druhý parametr je počet období (volitelné, pokud je zadáno datum ukončení)
- Posledním parametrem je frekvence: den
D, měsícMa rokY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
Výstup
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)
Výstup
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')
Poznámka k verzi: alias měsíce M Výše uvedené je zastaralé v Pandas 2.2 a odstraněno v Pandas 3.0. V aktuálních verzích platí freq='ME' na konec měsíce; výsledný index je identický.
Kontrola dat
Začátek nebo konec datové sady můžete zkontrolovat pomocí head() or tail() voláno na DataFrame, jak ukazuje níže uvedený příklad Pandas.
Krok 1) Vytvořte náhodnou posloupnost pomocí NumPy. Posloupnost má 4 sloupce a 6 řádků.
random = np.random.randn(6,4)
Krok 2) Pak vytvoříte DataFrame pomocí Pandas.
Použijte dates_m jako index, takže každý řádek dostane název odpovídající datu a 4 sloupce pojmenujte pomocí columns argument.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Protože np.random.randn() běží bez semínka, vaše čísla se budou lišit od těch zde vytištěných. Zavolejte np.random.seed(0) nejdříve, pokud chcete reprodukovat pevnou sadu.
Krok 3) Použití funkce head
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 |
Krok 4) Použití funkce tail
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 |
Krok 5) Skvělý způsob, jak získat představu o datech, je describe()Uvádí počet, průměr, standardní hodnotu, minimum, maximum a percentily datové sady.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| počítat | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| střední | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| std | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| min | -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 |
Slice Data
Řezání vytáhne podmnožinu řádků nebo sloupců z datového rámce. Název sloupce můžete použít k extracjeden sloupec, jak ukazuje níže uvedený příklad Pandas.
## 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
Pro výběr více sloupců potřebujete dvojitou závorku, [[..,..]]První dvojice znamená, že chcete vybrat sloupce; druhá dvojice uvádí, které sloupce se mají vrátit.
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 |
Řádky můžete rozdělit pomocí dvojtečky. Následující kód vrátí první tři řádky.
### 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 |
Jedno loc Přístupový objekt vybírá sloupce podle názvu. Jako obvykle hodnota před čárkou představuje řádky a hodnota za ní sloupce a pro výběr více než jednoho sloupce jsou potřeba závorky.
## 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 |
Existuje i jiná metoda pro výběr více řádků a sloupců. iloc[] používá celočíselné pozice místo názvů sloupců, takže níže uvedený kód vrací stejný DataFrame jako výše.
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 |
Pusťte sloupec
Sloupce můžete zrušit pomocí df.drop(), předávání jmen v columns argument.
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 |
Zřetězení
Dva datové rámce můžete zřetězit pomocí pd.concat()Nejprve vytvořte dva rámy.
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])
Pak je zřetězte.
df_concat = pd.concat([df1,df2]) df_concat
| věk | název | |
|---|---|---|
| 0 | 25 | Jan |
| 1 | 30 | kovář |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
| 4 | 11 | kovář |
Odstranění duplikátů
Pokud datová sada obsahuje duplicitní informace, drop_duplicates() je snadný způsob, jak vyloučit opakující se řádky. df_concat obsahuje duplicitní pozorování: Smith objevuje se dvakrát v name sloupec.
df_concat.drop_duplicates('name')
| věk | název | |
|---|---|---|
| 0 | 25 | Jan |
| 1 | 30 | kovář |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
Seřadit hodnoty
Rámec můžete seřadit pomocí sort_values(), Všimněte si, že Age byl zde vytvořen jako text, takže řádky se seřadí podle pořadí řetězců.
df_concat.sort_values('Age')
| věk | název | |
|---|---|---|
| 4 | 11 | kovář |
| 0 | 25 | Jan |
| 3 | 26 | Adam |
| 1 | 30 | kovář |
| 2 | 50 | Paul |
Přejmenovat sloupce
Použijte rename() přejmenování sloupce v Pandas. V každém páru je první hodnota aktuální název sloupce a druhá nový.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Age_ppl | Příjmení | |
|---|---|---|
| 0 | 25 | Jan |
| 1 | 30 | kovář |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
| 4 | 11 | kovář |
Rychlý přehled metod Pandas
Tato tabulka mapuje každý běžný úkol na metodu Pandas, která jej provádí.
| Úkol | Metoda |
|---|---|
| importovat data | read_csv |
| vytvořit sérii | Série |
| Vytvořit datový rámec | DataFrame |
| Vytvořte časové období | časové období |
| vrátit hlavu | hlava |
| zpětný ocas | ocas |
| Popsat | popsat |
| řez pomocí názvu | dataname['columnname'] |
| Nakrájejte pomocí řádků | data_name[0:5] |

