2013-07-04 11 views
8

Oczywiście nowy w Pandach. Jak mogę po prostu policzyć liczbę rekordów w ramce danych.Pandas Python, jak policzyć liczbę rekordów lub wierszy w ramce danych

Pomyślałem, że coś tak prostego, jak to zrobi, i nie mogę nawet znaleźć odpowiedzi w wyszukiwaniach ... prawdopodobnie dlatego, że jest zbyt proste.

cnt = df.count 
print cnt 

powyższy kod rzeczywiście tylko drukuje cały DF

+0

Ok to było proste. len (dataframe) był łatwą odpowiedzią. print len ​​(df3) – IcemanBerlin

+0

To działa ... tak jak w fyi wygląda na to, że opuszczasz '()', więc kiedy nazwiesz 'cnt = df.count', to faktycznie ustawiasz' cnt' jest równy metodzie ramki danych, a nie wynikowi tej metody. Spróbuj 'cnt = df.count(); wydrukuj cnt', aby zobaczyć, o czym mówię. – tshauck

+0

Ah. dzięki tshauck, myślę, że to było właśnie to, co próbowałem zrobić. Wynik tego testu faktycznie wydrukował liczbę dla każdego pola, tj. Pole 1 = 10, a następnie Pole 2 = 10. Sądzę, że można również zastosować liczbę do jednego konkretnego Pola? – IcemanBerlin

Odpowiedz

9

odniesieniu do Twojego pytania ... licząc jednej dziedzinie? Postanowiłem zrobić to pytanie, ale mam nadzieję, że to pomaga ...

Say mam następujący DataFrame

import numpy as np 
import pandas as pd 

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

Można liczyć pojedynczą kolumnę przez

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

zarówno do oceny 5.

Fajną rzeczą (lub jednym z wielu wrt pandas) jest to, że jeśli masz wartości NA, liczy bierze to pod uwagę.

Więc jeśli zrobiłem

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

Wynik byłby

A 3 
B 5 
2

Przykład Nan powyżej zdobywa jeden kawałek, który sprawia, że ​​mniej rodzajowy. Aby to zrobić bardziej "ogólnie" użyj df['column_name'].value_counts() To da ci liczbę z każdej wartości w tej kolumnie.

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

i jeśli pożądane są NaN, użyj: df ["col1"]. Value_counts (dropna = False) – SpeedCoder5

7

Wystarczy, ROW_NUM = df.shape [0] # podaje liczbę wierszy, oto przykład:

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

Aby uzyskać liczbę wierszy w użyciu dataframe:

df.shape[0] 

(i df.shape[1], aby uzyskać liczbę kolumn).

Jako alternatywę można użyć

len(df) 

lub

len(df.index) 

(i len(df.columns) dla kolumn)

shape jest bardziej wszechstronny i bardziej wygodne niż len(), zwłaszcza dla interaktywnej pracy (po prostu trzeba dodać na końcu), ale len jest nieco szybszy (patrz als o this answer).

Aby uniknąć: count() ponieważ zwraca liczba non-NA/obserwacje zerowe na żądanie oś

len(df.index) jest szybsza

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__ jest właśnie wezwanie do 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) 

Dlaczego nie należy używać count()

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