I'estou a tentar obter o número de linhas de dataframe df com Pandas, e aqui está o meu código.
total_rows = df.count
print total_rows +1
total_rows = df['First_columnn_label'].count
print total_rows +1
Ambos os trechos de código me dão este erro:
TypeError: tipo(s) de operando não suportado(s) para +: 'instancemethod' e 'int'
O que estou a fazer mal?
Você pode utilizar a propriedade .shape' ou apenas
len(DataFrame.index). Entretanto, há diferenças notáveis de desempenho (
len(DataFrame.index)` é mais rápido):
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: Como @Dan Allen observou nos comentários len(df.index)
e df[0].count()
não são intercambiáveis como count
exclui NaN
s,
Utilize len(df)
. Isto funciona a partir de pandas 0.11 ou talvez até mais cedo.
__len__()
está atualmente (0.12) documentado com Retorna o comprimento do índice
. Informação de tempo, configure da mesma forma que na resposta do root's:
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
Devido a uma chamada de função adicional é um pouco mais lento do que chamar len(df.index)
diretamente, mas isto não deve desempenhar qualquer papel na maioria dos casos de utilização.