2013-07-04 47 views
8

Ovviamente nuovo per Panda. Come posso semplicemente contare il numero di record in un dataframe.pandas python come contare il numero di record o righe in un dataframe

Avrei pensato una cosa semplice come questa, e non riesco nemmeno a trovare la risposta nelle ricerche ... probabilmente perché è troppo semplice.

cnt = df.count 
print cnt 

il codice di cui sopra in realtà si limita a stampare l'intera df

+0

Ok, era semplice. la len (dataframe) è stata la risposta facile. stampa len (df3) – IcemanBerlin

+0

Questo funziona ... proprio come un fyi sembra che tu stia smettendo di '()', quindi quando chiami 'cnt = df.count' in realtà stai impostando' cnt' uguale a un metodo del dataframe, non il risultato di tale metodo. Prova 'cnt = df.count(); stampa cnt' per vedere di cosa sto parlando. – tshauck

+0

Ah. grazie, tshauck, immagino che fosse in realtà quello che stavo cercando di fare. Il risultato di quel test ha effettivamente stampato il conteggio per ogni campo i.e.Field1 = 10 e la riga successiva Field2 = 10. Immagino che potresti anche applicare il conteggio a un campo particolare? – IcemanBerlin

risposta

9

quanto riguarda la vostra domanda ... contando un campo? Ho deciso di fare una domanda, ma spero che aiuta ...

Dire che ho il seguente dataframe

import numpy as np 
import pandas as pd 

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

Si poteva contare una singola colonna per

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

sia per valutare 5.

La cosa interessante (o uno dei molti wrt pandas) è che se si dispone di valori NA, il conteggio prende in considerazione.

Quindi, se ho fatto

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

Il risultato sarebbe

A 3 
B 5 
2

L'esempio Nan sopra manca un pezzo, che lo rende meno generico. Per fare questo più "genericamente" usa df['column_name'].value_counts() Questo ti darà i conteggi di ogni valore in quella colonna.

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

e se si desidera utilizzare i NaN: df ["col1"]. Value_counts (dropna = False) – SpeedCoder5

7

Semplicemente, row_num = df.shape [0] # dà il numero di righe, ecco l'esempio:

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

Per ottenere il numero di righe in un uso dataframe:

df.shape[0] 

(e df.shape[1] per ottenere il numero di colonne).

In alternativa è possibile utilizzare

len(df) 

o

len(df.index) 

(e len(df.columns) per le colonne)

shape è più versatile e più conveniente rispetto len(), soprattutto per il lavoro interattivo (deve solo essere aggiunto alla fine), ma len è un po 'più veloce (vedi als o this answer).

Per evitare: count() perché restituisce il numero di non-NA/osservazioni nulle su richiesta asse

len(df.index) è più veloce

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__ è solo una chiamata a 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) 

Perché non dovrebbe usare count()

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