Python Samouczek Pandas: DataFrame, zakres dat i zastosowanie
⚡ Inteligentne podsumowanie
Pandas jest oprogramowaniem typu open source Python Biblioteka do manipulowania danymi tabelarycznymi. Dostarcza struktur serii i ramek danych, zakresów dat, narzędzi pomocniczych do inspekcji oraz operacji wycinania, upuszczania, łączenia, sortowania i zmiany nazw zaprezentowanych w tym przewodniku.

Czym jest Pandas? Python?
Pandy jest biblioteką typu open source, która umożliwia manipulację danymi i ich analizę Python, obejmujący zarówno tabele liczbowe, jak i szeregi czasowe. Zapewnia łatwy sposób tworzenia, przetwarzania i porządkowania danych, a jest zbudowany na bazie numpy, więc aby Pandas mógł działać, musi być obecna biblioteka NumPy.
Dlaczego warto używać Pand?
Analitycy danych korzystają z Pand w Python ze względu na następujące korzyści:
- Z łatwością radzi sobie z brakującymi danymi
- Używa serii dla danych jednowymiarowych i ramki danych dla danych wielowymiarowych
- Zapewnia skuteczny sposób dzielenia danych
- Zapewnia elastyczny sposób łączenia, łączenia i przekształcania danych
- Zawiera potężny zestaw narzędzi do analizy szeregów czasowych
Krótko mówiąc, Pandas dostarcza potężne, łatwe w użyciu struktury danych oraz środki do szybkiego operowania na nich, dlatego właśnie zakotwicza większość Python analiza danych praca.
Jak zainstalować Pandas
Pandas jest dostarczany z Anacondą i większością usług zarządzanych notebooków, więc zazwyczaj jest już zainstalowany. Jeśli import się nie powiedzie, jedno z poniższych poleceń go doda. Środowisko wbudowane w Jak zainstalować TensorFlow zawiera również Pandy.
- pypeć:
pip install pandas - Anakonda:
conda install -c anaconda pandas - Wewnątrz Jupyter Notatnik komórka:
import sys !conda install --yes --prefix {sys.prefix} pandas
Co to jest ramka danych Pandy?
Pandas DataFrame to dwuwymiarowa struktura danych z etykietami, której kolumny mogą zawierać dane różnych typów. Jest to standardowy sposób przechowywania danych w formacie tabelarycznym: wiersze zawierają obserwacje, a kolumny nazwy informacji. Na przykład: Cena może być nazwą kolumny, a 2, 3, 4 mogą być wartościami cen.
Ramki danych są dobrze znane statystykom i innym osobom zajmującym się danymi. Poniższy rysunek przedstawia ten kształt — indeks wiersza z etykietą z boku i nazwane kolumny u góry.
Co to jest seria?
Seria to jednowymiarowa struktura danych. Może przechowywać dowolny typ danych, taki jak liczby całkowite, zmiennoprzecinkowe lub ciągi znaków, i jest przydatna do wykonywania obliczeń lub zwracania jednowymiarowej tablicy. Z definicji seria nie może mieć wielu kolumn; w takim przypadku należy użyć struktury DataFrame.
Konstruktor serii Pandas przyjmuje następujące parametry:
- Data: może być listą, słownikiem lub wartością skalarną
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Możesz dodać indeks za pomocą index. Nadaje nazwy wierszom, a jego długość musi być równa rozmiarowi kolumny.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Poniżej tworzysz serię Pandas z brakującą wartością w trzecim wierszu. Brakujące wartości w Python są pokazane jako NaN, np.nan z NumPy tworzy go sztucznie.
pd.Series([1,2,np.nan])
Wydajność
0 1.0 1 2.0 2 NaN dtype: float64
Utwórz ramkę danych Pandy
Możesz przekonwertować tablicę NumPy na DataFrame za pomocą pd.DataFrame(). Możliwa jest również sytuacja odwrotna: aby przekonwertować DataFrame z powrotem na tablicę, należy użyć np.array()lub df.to_numpy(), co jest zalecane w aktualnej dokumentacji 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]]
Słownik działa równie dobrze jako źródło informacji pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| Wiek | Imię i nazwisko | |
|---|---|---|
| 0 | 30 | John |
| 1 | 40 | Kowal |
Dane dotyczące zasięgu pand
Pandas oferuje wygodne API do tworzenia zakresu dat, który staje się indeksem szeregu czasowego. Wywołanie wygląda następująco:
pd.date_range(start, periods, freq):
- Pierwszym parametrem jest data początkowa
- Drugim parametrem jest ilość okresów (opcjonalna w przypadku podania daty końcowej)
- Ostatnim parametrem jest częstotliwość: dzień
D, miesiącMi rokY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
Wydajność
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)
Wydajność
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')
Uwaga dotycząca wersji: alias miesiąca M Użyte powyżej jest przestarzałe w Pandas 2.2 i usunięte w Pandas 3.0. W obecnych wersjach freq='ME' na koniec miesiąca; wynikowy indeks jest identyczny.
Sprawdzanie danych
Możesz sprawdzić początek lub koniec zbioru danych za pomocą head() or tail() wywoływane w DataFrame, jak pokazuje poniższy przykład Pandas.
Krok 1) Utwórz losową sekwencję za pomocą NumPy. Sekwencja ma 4 kolumny i 6 wierszy.
random = np.random.randn(6,4)
Krok 2) Następnie należy utworzyć DataFrame za pomocą Pandas.
Zastosowanie dates_m jako indeks, dzięki czemu każdemu wierszowi nadawana jest nazwa odpowiadająca dacie, a 4 kolumnom nadajemy nazwy columns argumenty.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Bo np.random.randn() Jeśli nie ma ziarna, Twoje liczby będą się różnić od tych wydrukowanych tutaj. Zadzwoń np.random.seed(0) po pierwsze, jeśli chcesz odtworzyć stały zestaw.
Krok 3) Korzystanie z funkcji głowy
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) Korzystanie z funkcji ogonowej
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) Doskonałym sposobem na uzyskanie informacji na temat danych jest describe(). Raportuje liczbę, średnią, odchylenie standardowe, wartość minimalną, maksymalną i percentyle zbioru danych.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| liczyć | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| oznaczać | 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 |
Dane plasterka
Wycinanie polega na wyodrębnieniu podzbioru wierszy lub kolumn z ramki danych. Możesz użyć nazwy kolumny, aby np.tracw jednej kolumnie, jak pokazuje poniższy przykład 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
Aby wybrać wiele kolumn, potrzebny jest podwójny nawias, [[..,..]]Pierwsza para oznacza, że chcesz wybrać kolumny; druga para określa, które kolumny mają zostać zwrócone.
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 |
Możesz podzielić wiersze na dwie części, używając dwukropka. Poniższy kod zwraca pierwsze trzy wiersze.
### 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 |
loc Akcesor wybiera kolumny po nazwie. Jak zwykle, wartość przed przecinkiem oznacza wiersze, a wartość po nim kolumny. Do wyboru więcej niż jednej kolumny potrzebne są nawiasy kwadratowe.
## 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 |
Istnieje inna metoda zaznaczania wielu wierszy i kolumn. iloc[] używa pozycji całkowitych zamiast nazw kolumn, więc poniższy kod zwraca tę samą ramkę danych, co powyżej.
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 |
Upuść kolumnę
Możesz usunąć kolumny za pomocą df.drop(), przekazując nazwy w columns argumenty.
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 |
Powiązanie
Można połączyć dwa DataFrames za pomocą pd.concat()Najpierw utwórz dwie ramki.
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])
Następnie je połącz.
df_concat = pd.concat([df1,df2]) df_concat
| Wiek | Nazwa | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Kowal |
| 2 | 50 | Paweł |
| 3 | 26 | Adam |
| 4 | 11 | Kowal |
Upuść duplikaty
Gdy zbiór danych zawiera zduplikowane informacje, drop_duplicates() jest prostym sposobem na wykluczenie powtarzających się wierszy. df_concat zawiera podwójną obserwację: Smith pojawia się dwa razy w name Kolumna.
df_concat.drop_duplicates('name')
| Wiek | Nazwa | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Kowal |
| 2 | 50 | Paweł |
| 3 | 26 | Adam |
Sortuj wartości
Możesz sortować ramkę za pomocą sort_values(), Należy pamiętać, że Age został tutaj utworzony jako tekst, więc wiersze są sortowane w kolejności ciągów znaków.
df_concat.sort_values('Age')
| Wiek | Nazwa | |
|---|---|---|
| 4 | 11 | Kowal |
| 0 | 25 | John |
| 3 | 26 | Adam |
| 1 | 30 | Kowal |
| 2 | 50 | Paweł |
Zmień nazwy kolumn
Zastosowanie rename() Aby zmienić nazwę kolumny w Pandas. W każdej parze pierwsza wartość to bieżąca nazwa kolumny, a druga to nowa.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Wiek_os | Nazwisko | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Kowal |
| 2 | 50 | Paweł |
| 3 | 26 | Adam |
| 4 | 11 | Kowal |
Szybki przewodnik po metodach Pandas
W tej tabeli każde typowe zadanie jest mapowane na metodę Pandas, która je wykonuje.
| Zadanie | Metoda wykonania |
|---|---|
| zaimportować dane | przeczytaj_csv |
| stworzyć serię | Seria |
| Utwórz ramkę danych | Ramka danych |
| Utwórz zakres dat | zakres dat |
| powrót głowy | głowa |
| zwrotny ogon | ogon |
| Opisać | opisać |
| plasterek używając nazwy | nazwa danych ['nazwa kolumny'] |
| Pokrój za pomocą rzędów | nazwa_danych[0:5] |

