Como faço para obter a contagem de filas de um pandas DataFrame?

I'estou a tentar obter o número de linhas de dataframe df com Pandas, e aqui está o meu código.

Método 1:

total_rows = df.count
print total_rows +1

Método 2:

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?

Solução

Você pode utilizar a propriedade .shape' ou apenaslen(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 NaNs,

Comentários (10)

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.

Comentários (0)

Além das respostas acima, utilize df.axes para obter o tuple com índices de linhas e colunas e depois utilize a função len():

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
Comentários (1)