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.

  • 🔘 Zbudowano na NumPy: Pandas wymaga NumPy, które dostarcza tablice dla każdej serii i ramki danych.
  • ️ Dwie struktury: Seria przechowuje jeden oznaczony wymiar; DataFrame przechowuje wiersze i kolumny różnych typów.
  • ✅ Zakresy dat: pd.date_range() buduje indeks na podstawie daty początkowej, liczby okresów i częstotliwości.
  • 🧪 Najpierw sprawdź: head(), tail() i describe() ujawniają kształt, rozrzut i percentyle przed jakąkolwiek analizą.
  • 🛠️. Kroj precyzyjnie: Nazwy nawiasów wybierają kolumny, loc wybiera według etykiety, a iloc wybiera według pozycji.
  • ⚠️ Uwaga dotycząca wersji: Alias ​​częstotliwości M jest przestarzały od wersji Pandas 2.2; obecne wersje oczekują wersji ME.

Python Samouczek Pandas: DataFrame, zakres dat i wykorzystanie Pandas

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.

Układ Pandas DataFrame z indeksem wiersza oznaczonym etykietą i nazwanymi kolumnami

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ąc M i rok Y
## 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]

FAQ

Numer Telefonu pd.odczyt_csv() ze ścieżką lub URLDodaj nazwy do kolumn etykiet, określ inny separator i użyj polecenia cols, aby zachować tylko potrzebne kolumny.

Funkcja isnull() oznacza je flagą, dropna() usuwa wiersze lub kolumny, których to dotyczy, a fillna() zastępuje je stałą lub statystyką, taką jak średnia kolumny. Brakujące wpisy są wyświetlane jako NaN.

groupby() dzieli wiersze na grupy według kolumny kluczowej, stosuje agregację, taką jak liczba, suma lub średnia, do każdej grupy, a następnie łączy wyniki w nowej ramce.

Zbuduj maskę logiczną i przekaż ją w nawiasach, na przykład df[df.Age == 30]. Połącz maski za pomocą operatorów ampersand i potoku, a następnie zawiń.ping każde porównanie w nawiasach.

pd.merge() dopasowuje wiersze w kolumnie kluczowej w taki sam sposób, w jaki SQL join działa z ustawieniem inner, left, right lub external. concat() układa ramki zamiast dopasowywania kluczy.

df.to_csv('out.csv', index=False) zapisuje plik z przecinkami, a df.to_excel('out.xlsx') zapisuje arkusz kalkulacyjny. Usuńping indeks pozwala uniknąć nienazwanej pierwszej kolumny przy następnym odczycie.

Asystenci AI profilują nową ramkę, proponują wywołania funkcji describe, groupby i plot, które warto uruchomić, oraz oznaczają kolumny z nietypowymi typami danych lub wieloma wartościami null. Potwierdź każdą sugestię na podstawie surowych danych.

Tak. Drugi pilot GitHub uzupełnia prosty komentarz w działającym kodzie Pandas w Jupyter komórek. Revsprawdź typy danych i liczbę wierszy zanim zaufaj wynikowi.

Podsumuj ten post następująco: