Comment obtenir le nombre de lignes d'un dataframe pandas ? df
?
Réponses
Trop de publicités?...en s'appuyant sur La réponse de Jan-Philip Gehrcke .
La raison pour laquelle len(df)
o len(df.index)
est plus rapide que df.shape[0]
:
Regardez le code. df.shape est une @property
qui exécute une méthode DataFrame appelant len
deux fois.
df.shape??
Type: property
String form: <property object at 0x1127b33c0>
Source:
# df.shape.fget
@property
def shape(self):
"""
Return a tuple representing the dimensionality of the DataFrame.
"""
return len(self.index), len(self.columns)
Et sous le capot de len(df)
df.__len__??
Signature: df.__len__()
Source:
def __len__(self):
"""Returns length of info axis, but here we use the index """
return len(self.index)
File: ~/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py
Type: instancemethod
len(df.index)
sera légèrement plus rapide que len(df)
puisqu'il y a un appel de fonction en moins, mais c'est toujours plus rapide que df.shape[0]
Je suis venu à Pandas d'une R et je constate que Pandas est plus compliqué lorsqu'il s'agit de sélectionner des lignes ou des colonnes.
J'ai dû lutter contre ça pendant un moment, puis j'ai trouvé des moyens de le gérer :
Obtenir le nombre de colonnes :
len(df.columns)
## Here:
# df is your data.frame
# df.columns returns a string. It contains column's titles of the df.
# Then, "len()" gets the length of it.
Obtenir le nombre de lignes :
len(df.index) # It's similar.
Dans le cas où vous voulez obtenir le nombre de lignes au milieu d'une opération chaînée, vous pouvez utiliser :
df.pipe(len)
Exemple :
row_count = (
pd.DataFrame(np.random.rand(3,4))
.reset_index()
.pipe(len)
)
Cela peut être utile si vous ne voulez pas placer une longue déclaration à l'intérieur d'un fichier de type len()
fonction.
Vous pourriez utiliser __len__()
mais __len__()
a l'air un peu bizarre.
21 votes
Ok j'ai trouvé, j'aurais dû appeler la méthode et non vérifier la propriété, donc ça devrait être df.count() et non df.count
97 votes
^ Dangereux ! Prenez garde que
df.count()
retournera uniquement le nombre de lignes non-NA/NaN pour chaque colonne. Vous devez utiliserdf.shape[0]
à la place, qui vous indiquera toujours correctement le nombre de lignes.6 votes
Notez que df.count ne retournera pas un int lorsque le dataframe est vide (par exemple, pd.DataFrame(columns=["Blue", "Red").count n'est pas 0)