web-dev-qa-db-fra.com

pandas python comment compter le nombre d'enregistrements ou de lignes dans une trame de données

De toute évidence nouveau pour les Pandas. Comment puis-je simplement compter le nombre d'enregistrements dans une trame de données.

J'aurais pensé quelque chose d'aussi simple que cela le ferait et je n'arrive même pas à trouver la réponse dans les recherches ... probablement parce que c'est trop simple.

cnt = df.count
print cnt

le code ci-dessus imprime en fait tout le df

20
IcemanBerlin

Cordialement à votre question ... compter un champ? J'ai décidé d'en faire une question, mais j'espère que ça aide ...

Disons que j'ai le DataFrame suivant

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.normal(0, 1, (5, 2)), columns=["A", "B"])

Vous pouvez compter une seule colonne par

df.A.count()
#or
df['A'].count()

les deux évaluent à 5.

Ce qui est cool (ou l'un des nombreux w.r.t. pandas) est que si vous avez des valeurs NA, count prend cela en considération.

Donc si je le faisais

df['A'][1::2] = np.NAN
df.count()

Le résultat serait

 A    3
 B    5
19
tshauck

Pour obtenir le nombre de lignes dans une trame de données, utilisez:

df.shape[0]

(et df.shape[1] pour obtenir le nombre de colonnes).

Comme alternative, vous pouvez utiliser

len(df)

ou

len(df.index)

(et len(df.columns) pour les colonnes)

shape est plus polyvalent et plus pratique que len(), en particulier pour le travail interactif (doit juste être ajouté à la fin), mais len est un peu plus rapide (voir aussi cette réponse ).

Pour éviter : count() car il renvoie le nombre de non-NA/null observations sur l'axe demandé

len(df.index) est plus rapide

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(24).reshape(8, 3),columns=['A', 'B', 'C'])
df['A'][5]=np.nan
df
# Out:
#     A   B   C
# 0   0   1   2
# 1   3   4   5
# 2   6   7   8
# 3   9  10  11
# 4  12  13  14
# 5 NaN  16  17
# 6  18  19  20
# 7  21  22  23

%timeit df.shape[0]
# 100000 loops, best of 3: 4.22 µs per loop

%timeit len(df)
# 100000 loops, best of 3: 2.26 µs per loop

%timeit len(df.index)
# 1000000 loops, best of 3: 1.46 µs per loop

df.__len__ N'est qu'un appel à len(df.index)

import inspect 
print(inspect.getsource(pd.DataFrame.__len__))
# Out:
#     def __len__(self):
#         """Returns length of info axis, but here we use the index """
#         return len(self.index)

Pourquoi vous ne devriez pas utiliser count()

df.count()
# Out:
# A    7
# B    8
# C    8
20
user2314737

Simplement, row_num = df.shape [0] # donne le nombre de lignes, voici l'exemple:

import pandas as pd
import numpy as np

In [322]: df = pd.DataFrame(np.random.randn(5,2), columns=["col_1", "col_2"])

In [323]: df
Out[323]: 
      col_1     col_2
0 -0.894268  1.309041
1 -0.120667 -0.241292
2  0.076168 -1.071099
3  1.387217  0.622877
4 -0.488452  0.317882

In [324]: df.shape
Out[324]: (5, 2)

In [325]: df.shape[0]   ## Gives no. of rows/records
Out[325]: 5

In [326]: df.shape[1]   ## Gives no. of columns
Out[326]: 2
8
Surya

L'exemple Nan ci-dessus manque une pièce, ce qui le rend moins générique. Pour faire cela de façon plus "générique", utilisez df['column_name'].value_counts() Cela vous donnera le nombre de chaque valeur dans cette colonne.

d=['A','A','A','B','C','C'," " ," "," "," "," ","-1"] # for simplicity

df=pd.DataFrame(d)
df.columns=["col1"]
df["col1"].value_counts() 
      5
A     3
C     2
-1    1
B     1
dtype: int64
"""len(df) give you 12, so we know the rest must be Nan's of some form, while also having a peek into other invalid entries, especially when you might want to ignore them like -1, 0 , "", also"""
2
ekta