Sto cercando di ottenere il numero di righe del dataframe df con Pandas, ed ecco il mio codice.
total_rows = df.count
print total_rows +1
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?
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
,
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.
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])