J'essaie d'obtenir le nombre de lignes de df de trame de données 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 deux 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?
df.count()
ne retournera que le nombre de lignes non NA / NaN pour chaque colonne. Vous devez utiliser à ladf.shape[0]
place, qui vous indiquera toujours correctement le nombre de lignes.Réponses:
Vous pouvez utiliser la
.shape
propriété ou tout simplementlen(DataFrame.index)
. Cependant, il existe des différences de performances notables (len(DataFrame.index)
est la plus rapide):EDIT: Comme @Dan Allen l'a noté dans les commentaires
len(df.index)
etdf[0].count()
ne sont pas interchangeables commecount
exclutNaN
s,la source
shape
dans un travail interactif, au lieu de len (df): en essayant différents filtrages, j'ai souvent besoin de savoir combien d'éléments restent. Avec la forme, je peux le voir simplement en ajoutant .shape après mon filtrage. Avec len (), l'édition de la ligne de commande devient beaucoup plus encombrante, dans les deux sens.df.empty
c'est la meilleure option.df.shape[0]
plus rapide quelen(df)
oulen(df.columns)
? Puisque 1 ns (nanoseconde) = 1000 µs (microseconde), donc 1,17µs = 1170ns, ce qui signifie qu'il est environ 3 fois plus lent que 381nsSupposons que
df
votre trame de données soit alors:Ou, plus succinctement,
la source
Utilisez
len(df)
. Cela fonctionne à partir de pandas 0.11 ou peut-être même plus tôt.__len__()
est actuellement (0,12) documenté avecReturns length of index
. Informations de synchronisation, configurées de la même manière que dans la réponse de root: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.la source
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.
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 -
Nombre de lignes d'une trame de données:
len(df)
,df.shape[0]
oulen(df.index)
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.Nombre de colonnes d'une trame de données:
df.shape[1]
,len(df.columns)
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)
s.size
etlen(s.index)
sont à peu près les mêmes en termes de vitesse. Mais je recommandelen(df)
.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:Pour les séries, utilisez
Series.count
un effet similaire:Nombre de lignes par groupe:
GroupBy.size
Pour
DataFrames
, utilisezDataFrameGroupBy.size
pour compter le nombre de lignes par groupe.De même, pour
Series
, vous utiliserezSeriesGroupBy.size
.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
, nonGroupBy.size
. Notez quesize
renvoie toujours unSeries
, tandis quecount
renvoie unSeries
si appelé sur une colonne spécifique, ou bien unDataFrame
.Les méthodes suivantes renvoient la même chose:
Pendant ce temps, pour
count
, nous avons... appelé sur l'ensemble de l'objet GroupBy, v / s,
Appelé sur une colonne spécifique.
la source
TL; DR
utilisation
len(df)
len()
est votre ami, il peut être utilisé pour le nombre de ligneslen(df)
.Vous pouvez également accéder à toutes les lignes par
df.index
et à toutes les colonnes pardf.columns
, et comme vous pouvez utiliser lelen(anyList)
pour obtenir le nombre de listes, utiliserlen(df.index)
pour obtenir le nombre de lignes et le nombre delen(df.columns)
colonnes.Ou, vous pouvez utiliser
df.shape
qui retourne le nombre de lignes et de colonnes ensemble, si vous souhaitez accéder au nombre de lignes utilisent uniquementdf.shape[0]
et pour le nombre de colonnes utilisez uniquement:df.shape[1]
.la source
Outre les réponses ci-dessus, l'utilisation peut être utilisée
df.axes
pour obtenir le tuple avec des index de ligne et de colonne, puis utiliser lalen()
fonction:la source
... en s'appuyant sur la réponse de Jan-Philip Gehrcke.
La raison pour laquelle
len(df)
oulen(df.index)
est plus rapide quedf.shape[0]
. Regardez le code. df.shape est un@property
qui exécute une méthode DataFrame appelantlen
deux fois.Et sous le capot de len (df)
len(df.index)
sera légèrement plus rapide quelen(df)
puisqu'il a un appel de fonction en moins, mais c'est toujours plus rapide quedf.shape[0]
la source
Je viens des pandas de
R
fond, et je vois que les pandas sont plus compliqués quand il s'agit de sélectionner une ligne ou une colonne. J'ai dû lutter avec pendant un certain temps, puis j'ai trouvé des moyens de gérer:obtenir le nombre de colonnes:
obtenir le nombre de lignes:
la source
df.shape
. Il renvoie le nombre de lignes et de colonnes respectivement.Si vous souhaitez obtenir le nombre de lignes au milieu d'une opération chaînée, vous pouvez utiliser:
Exemple:
Cela peut être utile si vous ne voulez pas mettre une longue instruction dans une
len()
fonction.Vous pouvez utiliser à la
__len__()
place, mais cela__len__()
semble un peu bizarre.la source
count = len(df.reset_index())
loincount = df.reset_index().pipe(len)
. Le premier n'est qu'une recherche d'attribut sans l'appel de fonction.Hé, vous pouvez également le faire:
Disons que
df
c'est votre dataframe.df.shape
Vous donne ensuite la forme de votre cadre de données, c'est-à-dire(row,col)
Ainsi, attribuez la commande ci-dessous pour obtenir la
la source
Pour dataframe df, un nombre de lignes au format virgule imprimé utilisé lors de l'exploration des données:
Exemple:
la source
Une méthode alternative pour trouver la quantité de lignes dans une trame de données qui, je pense, est la variante la plus lisible est
pandas.Index.size
.Notez que, comme j'ai commenté la réponse acceptée:
la source
Je ne sais pas si cela fonctionnerait (les données POURRAIENT être omises), mais cela peut fonctionner:
puis en utilisant cela, vous pouvez trouver le nombre de lignes en exécutant l'extrait de code et en regardant le numéro de ligne qui vous a été donné.
la source
L'un ou l'autre de ceci peut faire (
df
est le nom du DataFrame):Méthode 1: en utilisant la
len
fonction:len(df)
donnera le nombre de lignes dans un DataFrame nommédf
.Méthode 2: en utilisant la
count
fonction:df[col].count()
comptera le nombre de lignes dans une colonne donnéecol
.df.count()
donnera le nombre de lignes pour toutes les colonnes.la source