Come ottengo il conteggio delle righe di un DataFrame pandas?

Sto cercando di ottenere il numero di righe del dataframe df con Pandas, ed ecco il mio codice.

Metodo 1:

total_rows = df.count
print total_rows +1

Metodo 2:

total_rows = df['First_columnn_label'].count
print total_rows +1

Entrambi i frammenti di codice mi danno questo errore:

TypeError: unsupported operand type(s) for +: 'instancemethod' and 'int'

Cosa sto facendo di sbagliato?

Soluzione

Puoi usare la proprietà .shape o semplicemente len(DataFrame.index). Tuttavia, ci sono notevoli differenze di prestazioni (len(DataFrame.index) è più veloce):

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.DataFrame(np.arange(12).reshape(4,3))

In [4]: df
Out[4]: 
   0  1  2
0  0  1  2
1  3  4  5
2  6  7  8
3  9  10 11

In [5]: df.shape
Out[5]: (4, 3)

In [6]: timeit df.shape
2.77 µs ± 644 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [7]: timeit df[0].count()
348 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [8]: len(df.index)
Out[8]: 4

In [9]: timeit len(df.index)
990 ns ± 4.97 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

EDIT: Come @Dan Allen ha notato nei commenti len(df.index) e df[0].count() non sono intercambiabili poiché count esclude i NaN,

Commentari (10)

Usate len(df). Questo funziona a partire da pandas 0.11 o forse anche prima.

__len__() è attualmente (0.12) documentato con Returns length of index. Informazioni sui tempi, impostate nello stesso modo come nella risposta di root:

In [7]: timeit len(df.index)
1000000 loops, best of 3: 248 ns per loop

In [8]: timeit len(df)
1000000 loops, best of 3: 573 ns per loop

A causa di una chiamata di funzione aggiuntiva è un po 'più lento di chiamare direttamente len(df.index), ma questo non dovrebbe giocare alcun ruolo nella maggior parte dei casi d'uso.

Commentari (0)

Oltre alle risposte di cui sopra, puoi usare df.axes per ottenere la tupla con gli indici di riga e colonna e poi usare la funzione len():

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
Commentari (1)