Comment obtenir le nombre de lignes d'un DataFrame pandas ?

J'essaie d'obtenir le nombre de lignes du dataframe df avec Pandas, et voici mon code.

Méthode 1 :

total_rows = df.count
print total_rows +1

Méthode 2 :

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&#39 ; and 'int&#39 ;

Qu'est-ce que je fais de mal ?

[2] : https://stackoverflow.com/users/1199589/root

Solution

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)

[!entrer la description de l'image ici][1]][1]

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 NaNs,

[1] : https://i.stack.imgur.com/xoTgt.png

Commentaires (10)

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.

Commentaires (0)

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])
Commentaires (1)