it-swarm.com.de

Wie erhalte ich die Zeilenanzahl eines pandas DataFrames?

Ich versuche, mit Pandas die Anzahl der Zeilen des Datenrahmens df zu ermitteln, und hier ist mein Code.

Methode 1:

total_rows = df.count
print total_rows +1

Methode 2:

total_rows = df['First_columnn_label'].count
print total_rows +1

Beide Codefragmente geben mir diesen Fehler:

TypeError: Nicht unterstützte Operandentypen für +: 'instancemethod' und 'int'

Was mache ich falsch?

724
yemu

Sie können die Eigenschaft .shape oder nur len(DataFrame.index) verwenden. Es gibt jedoch bemerkenswerte Leistungsunterschiede (len(DataFrame.index) ist am schnellsten):

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.DataFrame(np.arange(12).reshape(4,3))

In [4]: df
Out[4]: 
   0  1  2
0  0  1  2
1  3  4  5
2  6  7  8
3  9  10 11

In [5]: df.shape
Out[5]: (4, 3)

In [6]: timeit df.shape
2.77 µs ± 644 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [7]: timeit df[0].count()
348 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [8]: len(df.index)
Out[8]: 4

In [9]: timeit len(df.index)
990 ns ± 4.97 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

enter image description here

BEARBEITEN: Wie @Dan Allen in den Kommentaren len(df.index) und df[0].count() feststellte, sind sie nicht austauschbar, da countNaNs ausschließt,

972
root

Angenommen, df ist Ihr Datenrahmen, dann:

count_row = df.shape[0]  # gives number of row count
count_col = df.shape[1]  # gives number of col count

Oder, genauer gesagt,

r, c = df.shape
220
Nasir Shah

Verwenden Sie len(df). Dies funktioniert ab pandas 0.11 oder vielleicht sogar früher.

__len__() ist aktuell (0.12) mit Returns length of index dokumentiert. Timing-Informationen richten Sie wie in der Antwort von root ein:

In [7]: timeit len(df.index)
1000000 loops, best of 3: 248 ns per loop

In [8]: timeit len(df)
1000000 loops, best of 3: 573 ns per loop

Aufgrund eines zusätzlichen Funktionsaufrufs ist dieser etwas langsamer als der direkte Aufruf von len(df.index), dies sollte jedoch in den meisten Anwendungsfällen keine Rolle spielen.

116

Wie erhalte ich die Zeilenanzahl eines pandas DataFrames?

In dieser Tabelle sind die verschiedenen Situationen zusammengefasst, in denen Sie der Vollständigkeit halber etwas in einem DataFrame (oder einer Datenreihe) zählen möchten, sowie die empfohlenen Methoden.

enter image description here

Fußnoten

  1. _DataFrame.count_ gibt die Anzahl für jede Spalte als Series zurück, da die Anzahl ungleich Null von Spalte zu Spalte variiert.
  2. _DataFrameGroupBy.size_ gibt ein Series zurück, da alle Spalten in derselben Gruppe dieselbe Zeilenanzahl haben.
  3. _DataFrameGroupBy.count_ gibt ein DataFrame zurück, da die Nicht-Null-Anzahl über Spalten in derselben Gruppe unterschiedlich sein kann. Verwenden Sie df.groupby(...)['x'].count(), um die gruppenweise Nicht-Null-Zählung für eine bestimmte Spalte abzurufen, wobei "x" die zu zählende Spalte ist.

Minimale Codebeispiele

Im Folgenden zeige ich Beispiele für die 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]_ oder len(df.index)

_len(df)
# 5

df.shape[0]
# 5

len(df.index)
# 5
_

Es erscheint albern, die Leistung von Operationen mit konstanter Zeit zu vergleichen, insbesondere wenn der Unterschied auf der Ebene von "ernsthaft, mach dir keine Sorgen" liegt. Aber dies scheint ein Trend zu sein, der Vollständigkeit halber mache ich dasselbe.

Von den drei oben genannten Methoden ist len(df.index) (wie in anderen Antworten erwähnt) die schnellste.

Hinweis

  • Alle oben genannten Methoden sind konstante Zeitoperationen, da es sich um einfache Attributsuchvorgänge handelt.
  • _df.shape_ (ähnlich zu _ndarray.shape_) ist ein Attribut, das einen Tupel von _(# Rows, # Cols)_ zurückgibt. Zum Beispiel gibt _df.shape_ für das Beispiel hier _(8, 2)_ zurück.

Spaltenanzahl eines Datenrahmens: _df.shape[1]_, len(df.columns)

_df.shape[1]
# 2

len(df.columns)
# 2
_

Analog zu len(df.index) ist len(df.columns) die schnellere der beiden Methoden (für die Eingabe sind jedoch mehr Zeichen erforderlich).

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 hinsichtlich der Geschwindigkeit ungefähr gleich. Aber ich empfehle len(df).

Hinweis
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 dasselbe Ergebnis wie _df.shape[0] * df.shape[1]_ zurückgibt.

Nicht-Null-Zeilenzahl: _DataFrame.count_ und _Series.count_

Die hier beschriebenen Methoden zählen nur Werte ungleich Null (dh NaNs werden ignoriert).

Durch Aufrufen von DataFrame.count werden Nicht-NaN-Zählungen für die Spalte each zurückgegeben:

_df.count()

A    5
B    3
dtype: int64
_

Verwenden Sie für Serien Series.count , um einen ähnlichen Effekt zu erzielen:

_s.count()
# 3
_

Gruppenweise Zeilenanzahl: _GroupBy.size_

Verwenden Sie für DataFramesDataFrameGroupBy.size , um die Anzahl der Zeilen pro Gruppe zu zählen.

_df.groupby('A').size()

A
a    2
b    2
c    1
dtype: int64
_

In ähnlicher Weise verwenden Sie für SeriesSeriesGroupBy.size .

_s.groupby(df.A).size()

A
a    2
b    2
c    1
Name: B, dtype: int64
_

In beiden Fällen wird ein Series zurückgegeben. Dies ist auch für DataFrames sinnvoll, da alle Gruppen die gleiche Zeilenanzahl haben.

Gruppenweise Nicht-Null-Zeilenzahl: _GroupBy.count_

Ähnlich wie oben, aber verwenden Sie GroupBy.count , nicht _GroupBy.size_. Beachten Sie, dass size immer ein Series zurückgibt, während count ein Series zurückgibt, wenn es für eine bestimmte Spalte aufgerufen wird, oder ein 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 haben wir für count

_df.groupby('A').count()

   B
A   
a  2
b  1
c  0
_

... das gesamte GroupBy-Objekt aufgerufen hat, v/s,

_df.groupby('A')['B'].count()

A
a    2
b    1
c    0
Name: B, dtype: int64
_

Wird für eine bestimmte Spalte aufgerufen.

23
cs95

len() ist dein Freund, kurze Antwort für Zeilenanzahl ist len(df).

Alternativ können Sie mit df.index auf alle Zeilen und mit df.columns auf alle Spalten zugreifen. Mit len(anyList) können Sie die Anzahl der Listen ermitteln, daher können Sie len(df.index) für verwenden Abrufen der Anzahl der Zeilen und len(df.columns) für die Spaltenanzahl.

Alternativ können Sie df.shape verwenden, das die Anzahl der Zeilen und Spalten zusammen zurückgibt. Wenn Sie nur auf die Anzahl der Zeilen zugreifen möchten, verwenden Sie df.shape[0] und für die Anzahl der Spalten nur: df.shape[1] .

22
Memin

Abgesehen von den obigen Antworten kann mit df.axes das Tupel mit den Zeilen- und Spaltenindizes abgerufen und anschließend die Funktion len() verwendet werden:

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
17
Nik

Zeilenanzahl (verwenden Sie eine der folgenden Optionen):

df.shape[0]
len(df)
6
Prakhar Agarwal

Ich komme zu pandas aus R Hintergrund, und ich sehe, dass pandas komplizierter ist, wenn es um die Auswahl von Zeilen oder Spalten geht. Ich musste mich eine Weile damit auseinandersetzen, dann fand ich einige Möglichkeiten, um damit umzugehen:

anzahl der Spalten ermitteln:

len(df.columns)  
## Here:
#df is your data.frame
#df.columns return a string, it contains column's titles of the df. 
#Then, "len()" gets the length of it.

anzahl der Zeilen ermitteln:

len(df.index) #It's similar.
6
Catbuilts

... auf der Antwort von Jan-Philip Gehrcke aufbauen.

Der Grund, warum len(df) oder len(df.index) schneller ist als df.shape[0]. Schauen Sie sich den Code an. df.shape ist ein @property, der eine DataFrame-Methode ausführt, die len zweimal aufruft.

df.shape??
Type:        property
String form: <property object at 0x1127b33c0>
Source:     
# df.shape.fget
@property
def shape(self):
    """
    Return a Tuple representing the dimensionality of the DataFrame.
    """
    return len(self.index), len(self.columns)

Und unter der haube von len (df)

df.__len__??
Signature: df.__len__()
Source:   
    def __len__(self):
        """Returns length of info axis, but here we use the index """
        return len(self.index)
File:      ~/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py
Type:      instancemethod

len(df.index) ist etwas schneller als len(df), da es einen Funktionsaufruf weniger gibt, dieser ist jedoch immer schneller als df.shape[0]

6
debo

df.shape gibt die Form des Datenrahmens in Form eines Tupels zurück (Anzahl der Zeilen, Anzahl der Spalten).

Sie können einfach auf nein zugreifen. von Zeilen oder Nr. von Spalten mit df.shape[0] bzw. df.shape[1], was dem Zugriff auf die Werte des Tupels entspricht.

5
Rohit Malhotra

Wenn Sie die Zeilenzahl in der Mitte einer verketteten Operation erhalten möchten, können Sie Folgendes verwenden:

df.pipe(len)

Beispiel:

row_count = (
      pd.DataFrame(np.random.Rand(3,4))
      .reset_index()
      .pipe(len)
)

Dies kann nützlich sein, wenn Sie keine lange Anweisung in eine len () - Funktion einfügen möchten.

Sie könnten stattdessen __len __ () verwenden, aber __len __ () sieht etwas seltsam aus.

2
Allen

Für dataframe df wird beim Durchsuchen von Daten eine durch Kommas formatierte Zeilenzahl verwendet:

def nrow(df):
    print("{:,}".format(df.shape[0]))

Beispiel:

nrow(my_df)
12,456,789
0
Vlad