Jak uzyskać liczbę wierszy pandy DataFrame?
Ta tabela podsumowuje różne sytuacje, w których chcesz policzyć coś w DataFrame (lub Series, dla kompletności), wraz z zalecanymi metodami.
Przypisy
DataFrame.count
zwraca liczbę dla każdej kolumny jako, Series
ponieważ liczba różna od wartości różni się w zależności od kolumny.
DataFrameGroupBy.size
zwraca a Series
, ponieważ wszystkie kolumny w tej samej grupie mają tę samą liczbę wierszy.
DataFrameGroupBy.count
zwraca a DataFrame
, ponieważ liczba różna od zera może się różnić między kolumnami w tej samej grupie. Aby uzyskać grupową liczbę niepustą dla określonej kolumny, użyj df.groupby(...)['x'].count()
gdzie „x” oznacza kolumnę do zliczenia.
Przykłady minimalnego kodu
Poniżej pokazuję przykłady każdej z metod opisanych w powyższej tabeli. Po pierwsze, konfiguracja -
df = pd.DataFrame({
'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()
df
A B
0 a x
1 a x
2 b NaN
3 b x
4 c NaN
s
0 x
1 x
2 NaN
3 x
4 NaN
Name: B, dtype: object
Liczba wierszy z DataFrame: len(df)
, df.shape[0]
lublen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Głupio wydaje się porównywanie wydajności operacji o stałym czasie, zwłaszcza gdy różnica jest na poziomie „poważnie, nie martw się o to”. Ale wydaje się, że jest to trend w przypadku innych odpowiedzi, więc robię to samo dla kompletności.
Z 3 powyższych metod len(df.index)
(jak wspomniano w innych odpowiedziach) jest najszybszy.
Uwaga
- Wszystkie powyższe metody są operacjami o stałym czasie, ponieważ są prostymi przeglądami atrybutów.
df.shape
(podobny do ndarray.shape
) to atrybut, który zwraca krotkę (# Rows, # Cols)
. Na przykład df.shape
zwraca (8,
2)
tutaj przykład.
Kolumna Hrabia z DataFrame: df.shape[1]
,len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Analogicznie do len(df.index)
, len(df.columns)
jest szybsza z dwóch metod (ale potrzeba więcej znaków do wpisania).
Wiersz liczyć z serii: len(s)
, s.size
,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size
i len(s.index)
są mniej więcej takie same pod względem prędkości. Ale polecam len(df)
.
Uwaga
size
jest atrybutem i zwraca liczbę elementów (= liczba wierszy dla dowolnej serii). DataFrames definiują również atrybut rozmiaru, który zwraca ten sam wynik co df.shape[0] * df.shape[1]
.
Liczba wierszy niepustych: DataFrame.count
iSeries.count
Opisane tutaj metody liczą tylko wartości inne niż null (co oznacza, że NaN są ignorowane).
Wywołanie DataFrame.count
zwróci liczby inne niż NaN dla każdej kolumny:
df.count()
A 5
B 3
dtype: int64
W przypadku serii użyj Series.count
podobnego efektu:
s.count()
# 3
Grupowa liczba wierszy: GroupBy.size
Do DataFrames
użyj, DataFrameGroupBy.size
aby policzyć liczbę wierszy na grupę.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
Podobnie, Series
użyjesz SeriesGroupBy.size
.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
W obu przypadkach Series
zwracane jest a . Ma to sensDataFrames
ponieważ wszystkie grupy mają tę samą liczbę wierszy.
Grupowa liczba wierszy niepustych: GroupBy.count
Podobnie jak powyżej, ale użyj GroupBy.count
, nie GroupBy.size
. Zauważ, że size
zawsze zwraca a Series
, podczas gdy count
zwraca Series
if, jeśli jest wywoływany w określonej kolumnie, albo też DataFrame
.
Następujące metody zwracają to samo:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Tymczasem count
mamy
df.groupby('A').count()
B
A
a 2
b 1
c 0
... wywołany dla całego obiektu GroupBy, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Wywoływany w określonej kolumnie.