Wie erhalte ich die Zeilenanzahl eines Pandas DataFrame?
Diese Tabelle fasst die verschiedenen Situationen zusammen, in denen Sie der Vollständigkeit halber etwas in einem DataFrame (oder einer Serie) zählen möchten, sowie die empfohlenen Methoden.
Fußnoten
DataFrame.count
Series
Gibt die Anzahl für jede Spalte als zurück, da die Anzahl ungleich Null je nach Spalte variiert.
DataFrameGroupBy.size
Gibt a zurück Series
, da alle Spalten in derselben Gruppe dieselbe Zeilenanzahl haben.
DataFrameGroupBy.count
Gibt a zurück DataFrame
, da die Anzahl der Nicht-Nullen in den Spalten derselben Gruppe unterschiedlich sein kann. Verwenden Sie df.groupby(...)['x'].count()
"x" als zu zählende Spalte, um die gruppenweise Nicht-Null-Zählung für eine bestimmte Spalte zu erhalten.
Beispiele für minimale Codes
Im Folgenden zeige ich Beispiele für jede der in der obigen Tabelle beschriebenen Methoden. Zunächst das Setup -
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
Zeilenanzahl eines Datenrahmens: len(df)
, df.shape[0]
oderlen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
Es erscheint unsinnig, die Leistung von Operationen mit konstanter Zeit zu vergleichen, insbesondere wenn der Unterschied auf der Ebene "Ernsthaft, mach dir keine Sorgen" liegt. Dies scheint jedoch ein Trend mit anderen Antworten zu sein, daher mache ich der Vollständigkeit halber dasselbe.
Von den 3 oben len(df.index)
genannten Methoden ist (wie in anderen Antworten erwähnt) die schnellste.
Hinweis
- Alle oben genannten Methoden sind Operationen mit konstanter Zeit, da es sich um einfache Attributsuchen handelt.
df.shape
(ähnlich wie ndarray.shape
) ist ein Attribut, das ein Tupel von zurückgibt (# Rows, # Cols)
. Zum Beispiel df.shape
gibt (8,
2)
für das Beispiel hier.
Spaltenanzahl eines Datenrahmen: df.shape[1]
,len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
Analog zu len(df.index)
, len(df.columns)
ist die schnellere der beiden Methoden (aber braucht mehr Zeichen - Typ).
Zeilenanzahl einer Serie: len(s)
, s.size
,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size
und len(s.index)
sind in Bezug auf die Geschwindigkeit ungefähr gleich. Aber ich empfehle len(df)
.
Note
size
ist ein Attribut und gibt die Anzahl der Elemente zurück (= Anzahl der Zeilen für jede Serie). DataFrames definieren auch ein Größenattribut, das das gleiche Ergebnis wie zurückgibt df.shape[0] * df.shape[1]
.
Nicht-Null-Zeilenanzahl: DataFrame.count
undSeries.count
Die hier beschriebenen Methoden zählen nur Nicht-Null-Werte (dh NaNs werden ignoriert).
Beim Aufrufen DataFrame.count
werden Nicht-NaN-Zählungen für jede Spalte zurückgegeben:
df.count()
A 5
B 3
dtype: int64
Verwenden Sie für Serien Series.count
einen ähnlichen Effekt:
s.count()
# 3
Gruppenweise Zeilenanzahl: GroupBy.size
DataFrames
Verwenden Sie für , um DataFrameGroupBy.size
die Anzahl der Zeilen pro Gruppe zu zählen.
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
Ebenso werden Sie für Series
verwenden SeriesGroupBy.size
.
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
In beiden Fällen wird a Series
zurückgegeben. Das macht Sinn fürDataFrames
da alle Gruppen die gleiche Zeilenanzahl haben.
Gruppenweise Nicht-Null-Zeilenanzahl: GroupBy.count
Ähnlich wie oben, aber GroupBy.count
nicht verwenden GroupBy.size
. Beachten Sie, dass size
immer a zurückgegeben wird Series
, während count
a zurückgegeben wird, Series
wenn es für eine bestimmte Spalte aufgerufen wird, oder a DataFrame
.
Die folgenden Methoden geben dasselbe zurück:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
Inzwischen count
haben wir
df.groupby('A').count()
B
A
a 2
b 1
c 0
... das gesamte GroupBy-Objekt aufgerufen, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Wird in einer bestimmten Spalte aufgerufen.