Comment puis-je 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.
Notes de bas de page
DataFrame.count
renvoie les décomptes pour chaque colonne sous forme de, Series
car le décompte non nul varie selon la colonne.
DataFrameGroupBy.size
renvoie a Series
, car toutes les colonnes du même groupe partagent le même nombre de lignes.
DataFrameGroupBy.count
renvoie a DataFrame
, car le nombre non nul peut différer d'une colonne à l'autre dans le même groupe. Pour obtenir le nombre non nul par groupe pour une colonne spécifique, utilisez df.groupby(...)['x'].count()
où "x" est la colonne à compter.
Exemples de code minimal
Ci-dessous, je montre 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'une trame de données: len(df)
, df.shape[0]
oulen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Il semble stupide de comparer les performances d'opérations à temps constant, surtout lorsque la différence est au niveau de "sérieusement, ne vous inquiétez pas". Mais cela semble être une tendance avec d'autres réponses, donc je fais de même pour être complet.
Des 3 méthodes ci-dessus, len(df.index)
(comme mentionné dans d'autres réponses) est la plus rapide.
Remarque
- Toutes les méthodes ci-dessus sont des opérations à temps constant car ce sont 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)
l'exemple ici.
Nombre de colonnes d'une trame de données: 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
et len(s.index)
sont à peu près les mêmes en termes de vitesse. Mais je recommande len(df)
.
La note
size
est un attribut et renvoie le nombre d'éléments (= nombre de lignes pour n'importe quelle série). Les DataFrames définissent également un attribut de taille qui renvoie le même résultat que df.shape[0] * df.shape[1]
.
Nombre de lignes non nulles: DataFrame.count
etSeries.count
Les méthodes décrites ici ne comptent que les valeurs non nulles (ce qui signifie que les NaN sont ignorés).
L'appel DataFrame.count
renvoie des nombres 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 lignes par groupe: GroupBy.size
Pour DataFrames
, utilisez 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 retourné. Cela a du sens pourDataFrames
puisque tous les groupes partagent le même nombre de lignes.
Nombre de lignes non nulles par groupe: GroupBy.count
Similaire ci - dessus, mais l' utilisation GroupBy.count
, non GroupBy.size
. Notez que size
renvoie toujours un Series
, tandis que count
renvoie un Series
si 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'ensemble de l'objet GroupBy, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Appelé sur une colonne spécifique.