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
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
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
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
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"""