Come posso ottenere il conteggio delle righe di un DataFrame Panda?
Questa tabella riassume le diverse situazioni in cui vorresti contare qualcosa in un DataFrame (o Serie, per completezza), insieme ai metodi consigliati.

Le note
DataFrame.countrestituisce i conteggi per ogni colonna come a Seriespoiché il conteggio non nullo varia in base alla colonna.
DataFrameGroupBy.sizerestituisce a Series, poiché tutte le colonne dello stesso gruppo condividono lo stesso conteggio di righe.
DataFrameGroupBy.countrestituisce a DataFrame, poiché il conteggio non nullo potrebbe differire tra le colonne dello stesso gruppo. Per ottenere il conteggio non nullo a livello di gruppo per una colonna specifica, utilizzare df.groupby(...)['x'].count()dove "x" è la colonna da contare.
Esempi di codice minimo
Di seguito, mostro esempi di ciascuno dei metodi descritti nella tabella sopra. Innanzitutto, l'installazione -
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
Conteggio righe di un dataframe: len(df), df.shape[0], olen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Sembra sciocco confrontare le prestazioni delle operazioni a tempo costante, specialmente quando la differenza è sul livello di "seriamente, non preoccuparti". Ma questa sembra essere una tendenza con altre risposte, quindi sto facendo lo stesso per completezza.
Dei 3 metodi sopra, len(df.index)(come menzionato in altre risposte) è il più veloce.
Nota
- Tutti i metodi sopra indicati sono operazioni a tempo costante in quanto sono semplici ricerche di attributi.
df.shape(simile a ndarray.shape) è un attributo che restituisce una tupla di (# Rows, # Cols). Ad esempio, df.shaperitorna (8,
2)per l'esempio qui.
Conte Colonna di un dataframe: df.shape[1],len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Analogamente a len(df.index), len(df.columns)è il più veloce dei due metodi (ma richiede più caratteri per digitare).
Numero di righe di una Serie: len(s), s.size,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.sizee len(s.index)sono più o meno gli stessi in termini di velocità. Ma io consiglio len(df).
Nota
size è un attributo e restituisce il numero di elementi (= conteggio delle righe per qualsiasi serie). DataFrames definisce anche un attributo size che restituisce lo stesso risultato di df.shape[0] * df.shape[1].
Conteggio righe non null: DataFrame.counteSeries.count
I metodi qui descritti contano solo valori non nulli (il che significa che i NaN vengono ignorati).
La chiamata DataFrame.countrestituirà conteggi non NaN per ogni colonna:
df.count()
A 5
B 3
dtype: int64
Per le serie, utilizzare Series.countcon effetti simili:
s.count()
# 3
Conteggio righe di gruppo: GroupBy.size
Per DataFrames, usare DataFrameGroupBy.sizeper contare il numero di righe per gruppo.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
Allo stesso modo, per Series, userete SeriesGroupBy.size.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
In entrambi i casi, Seriesviene restituito a. Questo ha senso DataFramesanche perché tutti i gruppi condividono lo stesso numero di righe.
Conteggio delle righe non nulle del gruppo: GroupBy.count
Simile a sopra, ma usare GroupBy.count, non GroupBy.size. Nota che sizerestituisce sempre a Series, mentre countrestituisce a Seriesse chiamato su una colonna specifica, oppure a DataFrame.
I seguenti metodi restituiscono la stessa cosa:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Nel frattempo, per count, abbiamo
df.groupby('A').count()
B
A
a 2
b 1
c 0
... chiamato sull'intero oggetto GroupBy, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Chiamato su una colonna specifica.