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.

  • 🔘 Postaveno na NumPy: Pandas vyžaduje NumPy, který dodává pole za každou sérií a datovým rámcem.
  • ☑️ Dvě struktury: Series ukládá jednu označenou dimenzi; DataFrame ukládá řádky a sloupce smíšených typů.
  • (Tj. Rozsahy dat: pd.date_range() vytvoří index z počátečního data, počtu period a frekvence.
  • 🧪 Nejprve zkontrolujte: Funkce head(), tail() a describe() odhalí tvar, rozptyl a percentily před jakoukoli analýzou.
  • 🛠️ Přesné řezání: Názvy závorek vybírají sloupce, loc vybírá podle popisku a iloc vybírá podle pozice.
  • ⚠️ Poznámka k verzi: Frekvenční alias M je od verze Pandas 2.2 zastaralý; aktuální verze očekávají ME.

Python Výukový program Pandas: DataFrame, rozsah dat a použití Pandas

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.

Rozvržení Pandas DataFrame s označeným indexem řádků a pojmenovanými sloupci

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íc M a rok Y
## 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]

Nejčastější dotazy

volání pd.read_csv() s cestou nebo URLPřidejte názvy k popiskům sloupců, sep pro jiný oddělovač a použijte cols pro zachování pouze potřebných sloupců.

isnull() je označí příznakem, dropna() odstraní postižené řádky nebo sloupce a fillna() nahradí konstantu nebo statistiku, například průměr sloupce. Chybějící položky se vypíší jako NaN.

Funkce groupby() rozděluje řádky do skupin podle klíčového sloupce, na každou skupinu aplikuje agregaci, například počet, součet nebo průměr, a poté výsledky zkombinuje do nového rámce.

Vytvořte booleovskou masku a předejte ji v hranatých závorkách, například df[df.Age == 30]. Zkombinujte masky s operátory ampersand a svisle, zabalte jeping každé srovnání v závorkách.

pd.merge() porovnává řádky v klíčovém sloupci stejným způsobem jako SQL Funkce join dělá to, s nastavením hodnoty inner, left, right nebo outer. concat() stohuje snímky místo porovnávání klíčů.

df.to_csv('out.csv', index=False) zapíše soubor s čárkami a df.to_excel('out.xlsx') zapíše pracovní list. Dropping Index se při dalším čtení vyhne nepojmenovanému prvnímu sloupci.

Asistenti umělé inteligence profilují nový snímek, navrhují volání popisu, seskupení a vykreslení, která je vhodné spustit, a označují sloupce s lichými typy dat nebo mnoha hodnotami null. Každý návrh ověřují na základě nezpracovaných dat.

Ano. GitHub Copilot doplní prostý komentář do funkčního kódu Pandas v Jupyter buňka. RevPřed důvěryhodností výsledku si prohlédněte typy dat a počet řádků.

Shrňte tento příspěvek takto: