J'essaie d'obtenir le nombre de lignes du dataframe df avec Pandas, et voici mon code.
total_rows = df.count
print total_rows +1
total_rows = df['First_columnn_label'].count
print total_rows +1
Les deux extraits de code me donnent cette erreur :
TypeError : unsupported operand type(s) for + : 'instancemethod' ; and 'int' ;
Qu'est-ce que je fais de mal ?
Vous pouvez utiliser la propriété .shape
ou simplement len(DataFrame.index)
. Cependant, il y a des différences de performances notables ( len(DataFrame.index)
est le plus rapide) :
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 : Comme @Dan Allen l'a noté dans les commentaires len(df.index)
et df[0].count()
ne sont pas interchangeables car count
exclut les NaN
s,
Utilisez len(df)
. Cela fonctionne à partir de pandas 0.11 ou peut-être même avant.
__len__()
est actuellement (0.12) documenté avec Returns length of index
. Info sur le timing, configuré de la même manière que dans la réponse de 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
En raison d'un appel de fonction supplémentaire, il est un peu plus lent que d'appeler directement len(df.index)
, mais cela ne devrait pas jouer de rôle dans la plupart des cas d'utilisation.
En dehors des réponses ci-dessus, vous pouvez utiliser df.axes
pour obtenir le tuple avec les index des lignes et des colonnes, puis utiliser la fonction len()
:
total_rows=len(df.axes[0])
total_cols=len(df.axes[1])