Question Comment puis-je obtenir le nombre de lignes d'un fichier de données Pandas?


J'essaie d'obtenir le nombre de lignes de 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 extraits de code me donnent cette erreur:

TypeError: type (s) d'opérande non pris en charge pour +: 'instancemethod' et 'int'

Qu'est-ce que je fais mal?

Selon la réponse donné par @racine le meilleur moyen (le plus rapide) de vérifier la longueur df est d'appeler:

df.shape[0]

432
2018-04-11 08:14


origine


Réponses:


Vous pouvez utiliser le .shape propriété ou juste len(DataFrame.index). Cependant, il existe des différences de performance notables (le .shape la propriété est 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
1000000 loops, best of 3: 1.17 us per loop

In [7]: timeit df[0].count()
10000 loops, best of 3: 56 us per loop

In [8]: len(df.index)
Out[8]: 4

In [9]: timeit len(df.index)
1000000 loops, best of 3: 381 ns per loop

enter image description here

EDIT: Comme @Dan Allen noté dans les commentaires len(df.index) et df[0].count() ne sont pas interchangeables comme count exclut NaNs,


564
2018-04-11 08:24



supposons que df soit votre dataframe alors:

Count_Row=df.shape[0] #gives number of row count
Count_Col=df.shape[1] #gives number of col count

102
2018-02-20 13:30



Utilisation len(df). Cela fonctionne comme pour les pandas 0,11 ou peut-être même plus tôt.

__len__() est actuellement (0,12) documenté avec Returns length of index. Les informations de timing, configurées 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 len(df.index) directement, mais cela ne devrait jouer aucun rôle dans la plupart des cas d'utilisation.


91
2017-08-19 15:02



En dehors des réponses ci-dessus, l'utilisation peut utiliser df.axes pour obtenir le tuple avec les index de ligne et de colonne, puis utilisez len() fonction:

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

15
2017-08-19 19:07



Pour obtenir des lignes utiliser

df.index

et pour les colonnes

df.columns

Vous pouvez toujours utiliser len(anyList) pour obtenir le compte de la liste, d'où vous pouvez utiliser len(df.index) pour obtenir le nombre de lignes.

Mais gardez à l'esprit, comme indiqué par @root, en utilisant df.shape[0] and df.shape[1] pour obtenir le nombre de lignes et de colonnes, respectivement, est une option plus rapide.


12
2018-06-25 05:23



Je viens aux pandas de R fond, et je vois que les pandas est plus compliqué quand il s'agit de sélectionner une ligne ou une colonne. J'ai dû me débattre pendant un moment, puis j'ai trouvé des moyens de gérer:

obtenir le nombre de colonnes:

len(df.columns)  
## Here:
#df is your data.frame
#df.columns return 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.

6
2017-09-29 07:41



df.shape renvoie la forme du bloc de données sous la forme d'un tuple (nombre de lignes, nombre de colonnes).

Vous pouvez simplement accéder à no. de lignes ou non. de cols avec df.shape[0] ou df.shape[1], respectivement, ce qui revient à accéder aux valeurs du tuple.


4
2017-11-06 13:07



... en s'appuyant sur la réponse de Jan-Philip Gehrcke.

La raison pour laquelle len(df) ou len(df.index) est plus rapide que df.shape[0]. Regardez le code. df.shape est un @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) comme il a un appel de fonction de moins, mais c'est toujours plus rapide que df.shape[0]


3
2017-12-07 23:37



Si vous souhaitez obtenir le nombre de lignes au milieu d'une opération en chaîne, 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 instruction dans une fonction len ().

Vous pourriez utiliser __len __ () à la place, mais __len __ () semble un peu bizarre.


2
2018-02-22 02:58



Nombre de lignes (utilisez l'un des):

df.shape[0]
len(df)

1
2017-11-20 08:56



Pour dataframe df, un nombre de lignes formaté par virgule imprimé utilisé lors de l'exploration des données:

def nrow(df):
    print("{:,}".format(df.shape[0]))

Exemple:

nrow(my_df)
12,456,789

0
2017-09-21 01:59