I'm versuchen, die Anzahl der Zeilen von dataframe df mit Pandas zu erhalten, und hier ist mein Code.
total_rows = df.count
print total_rows +1
total_rows = df['First_columnn_label'].count
print total_rows +1
Beide Codeschnipsel geben mir diesen Fehler:
TypeError: nicht unterstützte(r) Operandentyp(en) für +: 'instancemethod' und 'int'
Was mache ich falsch?
Sie können die Eigenschaft .shape
oder einfach len(DataFrame.index)
verwenden. Es gibt jedoch erhebliche 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)
EDIT: Wie @Dan Allen in den Kommentaren bemerkte, sind len(df.index)
und df[0].count()
nicht austauschbar, da count
NaN
ausschließt,
Verwenden Sie len(df)
. Dies funktioniert ab Pandas 0.11 oder vielleicht sogar früher.
__len__()
ist derzeit (0.12) mit Returns length of index
dokumentiert. Timing-Info, eingerichtet wie in der Antwort von root:
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
Durch einen zusätzlichen Funktionsaufruf ist es etwas langsamer als der direkte Aufruf von len(df.index)
, aber das sollte in den meisten Anwendungsfällen keine Rolle spielen.
Abgesehen von den obigen Antworten können Sie df.axes
verwenden, um das Tupel mit den Zeilen- und Spaltenindizes zu erhalten und dann die Funktion len()
verwenden:
total_rows=len(df.axes[0])
total_cols=len(df.axes[1])