2013-07-04 10 views
8

Offensichtlich neu für Pandas. Wie kann ich einfach die Anzahl der Datensätze in einem Datenrahmen zählen?pandas python wie man die Anzahl der Datensätze oder Zeilen in einem Datenrahmen zählt

Ich hätte gedacht, etwas so einfach wie das würde es tun und ich kann nicht scheinen, sogar die Antwort in den Suchanfragen zu finden ... wahrscheinlich, weil es zu einfach ist.

cnt = df.count 
print cnt 

der obige Code gibt eigentlich nur die ganze df

+0

Ok, es war einfach verwenden. Das Len (Dataframe) war die einfache Antwort. print len ​​(df3) – IcemanBerlin

+0

Das funktioniert ... genau wie ein fyi sieht es so aus, als würdest du die '') verlassen, also wenn du 'cnt = df.count' nennst, setzt du' cnt' gleich einer Methode des Datenrahmens, nicht das Ergebnis dieser Methode. Versuchen Sie 'cnt = df.count(); drucke cnt', um zu sehen, worüber ich rede. – tshauck

+0

Ah. Danke, tshauck, ich denke, das war genau das, was ich versuchte zu tun. Das Ergebnis zu diesem Test tatsächlich gedruckt die Anzahl für jedes Feld, d. H. Field1 = 10 und nächste Zeile Feld2 = 10. Ich denke, Sie könnten auch die Anzahl auf ein bestimmtes Feld anwenden? – IcemanBerlin

Antwort

9

Bezug auf Ihre Frage ... ein Feld zu zählen? Ich beschloss, es eine Frage zu machen, aber ich hoffe, es hilft ...

Sagen wir, ich habe folgende Datenrahmen

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.normal(0, 1, (5, 2)), columns=["A", "B"]) 

Sie eine einzelne Spalte zählen konnte durch

df.A.count() 
#or 
df['A'].count() 

beide bewerten zu 5.

Die coole Sache (oder eine von vielen wrt pandas) ist, dass, wenn Sie Werte haben, zählt dies berücksichtigt.

Also, wenn ich

tat
df['A'][1::2] = np.NAN 
df.count() 

Das Ergebnis wäre oben verpasst ein Stück

A 3 
B 5 
2

Das Nan Beispiel sein, die es weniger generisch macht. Um dies mehr "generisch" zu machen, verwenden Sie df['column_name'].value_counts() Dies gibt Ihnen die Anzahl der einzelnen Werte in dieser Spalte.

d=['A','A','A','B','C','C'," " ," "," "," "," ","-1"] # for simplicity 

df=pd.DataFrame(d) 
df.columns=["col1"] 
df["col1"].value_counts() 
     5 
A  3 
C  2 
-1 1 
B  1 
dtype: int64 
"""len(df) give you 12, so we know the rest must be Nan's of some form, while also having a peek into other invalid entries, especially when you might want to ignore them like -1, 0 , "", also""" 
+0

und wenn NaNs verwendet werden sollen: df ["col1"]. Value_counts (dropna = False) – SpeedCoder5

7

einfach, row_num = df.shape [0] # Anzahl der Zeilen gibt, ist hier das Beispiel:

import pandas as pd 
import numpy as np 

In [322]: df = pd.DataFrame(np.random.randn(5,2), columns=["col_1", "col_2"]) 

In [323]: df 
Out[323]: 
     col_1  col_2 
0 -0.894268 1.309041 
1 -0.120667 -0.241292 
2 0.076168 -1.071099 
3 1.387217 0.622877 
4 -0.488452 0.317882 

In [324]: df.shape 
Out[324]: (5, 2) 

In [325]: df.shape[0] ## Gives no. of rows/records 
Out[325]: 5 

In [326]: df.shape[1] ## Gives no. of columns 
Out[326]: 2 
3

Um die Anzahl der Zeilen in einem Datenrahmen Nutzung zu erhalten:

df.shape[0] 

(und df.shape[1], um die Anzahl der Spalten zu erhalten).

Als Alternative können Sie

len(df) 

oder

len(df.index) 

(und len(df.columns) für die Spalten) verwenden

shape vielseitiger und bequemer ist als len(), vor allem für die interaktive Arbeit (muss nur am Ende hinzugefügt werden), aber len ist ein bisschen schneller (siehe auch o).

zu vermeiden: count() weil es die Zahl der Nicht-NA/null Beobachtungen gibt angefordert über Achse

len(df.index) ist schneller

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.arange(24).reshape(8, 3),columns=['A', 'B', 'C']) 
df['A'][5]=np.nan 
df 
# Out: 
#  A B C 
# 0 0 1 2 
# 1 3 4 5 
# 2 6 7 8 
# 3 9 10 11 
# 4 12 13 14 
# 5 NaN 16 17 
# 6 18 19 20 
# 7 21 22 23 

%timeit df.shape[0] 
# 100000 loops, best of 3: 4.22 µs per loop 

%timeit len(df) 
# 100000 loops, best of 3: 2.26 µs per loop 

%timeit len(df.index) 
# 1000000 loops, best of 3: 1.46 µs per loop 

df.__len__ ist nur ein Aufruf len(df.index)

import inspect 
print(inspect.getsource(pd.DataFrame.__len__)) 
# Out: 
#  def __len__(self): 
#   """Returns length of info axis, but here we use the index """ 
#   return len(self.index) 

Warum sollten Sie nicht count()

df.count() 
# Out: 
# A 7 
# B 8 
# C 8 
Verwandte Themen