Comment obtenir le nombre de lignes d'un DataFrame Pandas ?
Ce tableau résume les différentes situations dans lesquelles vous souhaitez compter quelque chose dans un DataFrame (ou une série, pour être complet), ainsi que la ou les méthodes recommandées.
![Enter image description here]()
Notes de bas de page
-
DataFrame.count
renvoie les comptes pour chaque colonne sous forme de Series
puisque le nombre de non-nuls varie selon les colonnes.
-
DataFrameGroupBy.size
renvoie un Series
puisque toutes les colonnes d'un même groupe partagent le même nombre de lignes.
-
DataFrameGroupBy.count
renvoie un DataFrame
puisque le compte non nul peut différer entre les colonnes d'un même groupe. Pour obtenir le nombre de non-nuls par groupe pour une colonne spécifique, utilisez df.groupby(...)['x'].count()
où "x" est la colonne à compter.
Exemples de code minimal
Je présente ci-dessous des exemples de chacune des méthodes décrites dans le tableau ci-dessus. Tout d'abord, la configuration -
df = pd.DataFrame({
'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()
df
A B
0 a x
1 a x
2 b NaN
3 b x
4 c NaN
s
0 x
1 x
2 NaN
3 x
4 NaN
Name: B, dtype: object
Nombre de lignes d'un DataFrame : len(df)
, df.shape[0]
ou len(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Il semble idiot de comparer les performances d'opérations à temps constant, surtout quand la différence est du niveau de "sérieusement, ne vous en faites pas". Mais cela semble être une tendance avec d'autres réponses, donc je fais la même chose pour être complet.
Parmi les trois méthodes ci-dessus, len(df.index)
(comme mentionné dans d'autres réponses) est le plus rapide.
Note
- Toutes les méthodes ci-dessus sont des opérations en temps constant car il s'agit de simples recherches d'attributs.
-
df.shape
(similaire à ndarray.shape
) est un attribut qui renvoie un tuple de (# Rows, # Cols)
. Par exemple, df.shape
renvoie à (8, 2)
pour l'exemple ici.
Nombre de colonnes d'un DataFrame : df.shape[1]
, len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Analogue à len(df.index)
, len(df.columns)
est la plus rapide des deux méthodes (mais prend plus de caractères à taper).
Nombre de lignes d'une série : len(s)
, s.size
, len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size
y len(s.index)
sont à peu près les mêmes en termes de vitesse. Mais je recommande len(df)
.
Note size
est un attribut et renvoie le nombre d'éléments (=count). de lignes pour toute série). Les DataFrames définissent également un attribut size qui renvoie le même résultat que df.shape[0] * df.shape[1]
.
Non-Null Row Count : DataFrame.count
y Series.count
Les méthodes décrites ici ne comptent que les valeurs non nulles (ce qui signifie que les NaN sont ignorés).
Appel à DataFrame.count
retournera des comptages non-NaN pour chaque colonne :
df.count()
A 5
B 3
dtype: int64
Pour les séries, utilisez Series.count
à un effet similaire :
s.count()
# 3
Nombre de rangs par groupe : GroupBy.size
Para DataFrames
utiliser DataFrameGroupBy.size
pour compter le nombre de lignes par groupe.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
De même, pour Series
vous utiliserez SeriesGroupBy.size
.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Dans les deux cas, un Series
est renvoyé. Cela est utile pour DataFrames
puisque tous les groupes partagent le même nombre de lignes.
Comptage des rangs non nuls par groupe : GroupBy.count
Similaire au précédent, mais utiliser GroupBy.count
pas GroupBy.size
. Notez que size
renvoie toujours un Series
alors que count
renvoie un Series
s'il est appelé sur une colonne spécifique, ou bien un DataFrame
.
Les méthodes suivantes renvoient la même chose :
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Pendant ce temps, pour count
nous avons
df.groupby('A').count()
B
A
a 2
b 1
c 0
...appelé sur l'objet GroupBy entier, vs,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Appelé sur une colonne spécifique.
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)