Panda DataFrame'in satır sayısını nasıl alabilirim?


932

Pandalar ile dataframe df satır sayısını almaya çalışıyorum ve işte benim kod.

Yöntem 1:

total_rows = df.count
print total_rows +1

Yöntem 2:

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

Her iki kod parçacığı da bana bu hatayı veriyor:

TypeError: +: 'instancemethod' ve 'int' için desteklenmeyen işlenen türleri

Neyi yanlış yapıyorum?


12
tamam öğrendim, ben özelliği kontrol değil yöntemi çağırdı, bu yüzden df.count () hayır df.count
yemu

56
^ Tehlikeli! df.count()Her sütun için yalnızca NA / NaN olmayan satırların sayısını döndüreceklerine dikkat edin . Bunun df.shape[0]yerine, her zaman doğru satır sayısını söyleyecek şekilde kullanmalısınız .
smci

3
Veri çerçevesi boşken df.count'un bir int döndürmeyeceğini unutmayın (örneğin, pd.DataFrame (sütunlar = ["Mavi", "Kırmızı"). Sayı 0 değildir)
Marcelo Bielsa

Yanıtlar:


1250

.shapeMülkü veya sadece kullanabilirsiniz len(DataFrame.index). Bununla birlikte, dikkate değer performans farklılıkları vardır ( len(DataFrame.index)en hızlı):

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)

resim açıklamasını buraya girin

DÜZENLEME: @ Dan Allen yorumlarda belirtildiği len(df.index)ve hariç tutulduğu df[0].count()gibi değiştirilemez ,countNaN


13
shapeLen (df) yerine interaktif işte kullanmanın iyi bir nedeni var : Farklı filtreleme denemek, genellikle kaç öğenin kaldığını bilmek zorundayım. Şekli ile sadece filtreleme sonra .shape ekleyerek görebilirsiniz. Len () ile komut satırının düzenlenmesi ileri geri giderek daha hantal hale gelir.
K.-Michael Aye

9
OP için çalışmayacak, ancak veri çerçevesinin boş olup olmadığını bilmeniz gerekiyorsa df.empty, en iyi seçenektir.
jtschoonhoven

19
Bir süre geçtiğini biliyorum, ancak len (df.index) 381 nanosaniye veya 0.381 mikrosaniye almıyor, df.shape 3 kat daha yavaş, 1.17 mikrosaniye alıyor. Bir şey mi kaçırdım? @root
TG

11
(3,3) matris şekil
tupleinin

4
Ne kadar df.shape[0]hızlı len(df)ya da len(df.columns)? Yana 1 ns (nanosaniye) = 1000 us bu 381ns göre yaklaşık 3 kat daha yavaş aracı (mikro), bu nedenle 1.17μs = 1170ns,
itsjef

303

Diyelim ki dfveri çerçeveniz:

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

Veya daha özlü bir şekilde,

r, c = df.shape

4
Veri kümesi büyükse, yalnızca satır sayısına ihtiyacınız varsa len (df.index) df.shape [0] 'dan önemli ölçüde daha hızlıdır. Test ettim.
Pokhrel

145

Kullanın len(df). Bu, pandalar 0.11 veya belki de daha önce çalışır.

__len__()şu anda (0.12) ile belgelenmiştir Returns length of index. Zamanlama bilgisi, kök yanıtında olduğu gibi ayarlayın:

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

Bir ek işlev çağrısı nedeniyle, len(df.index)doğrudan çağrıdan biraz daha yavaştır , ancak bu çoğu kullanım durumunda herhangi bir rol oynamamalıdır.


81

Panda DataFrame'in satır sayısını nasıl alabilirim?

Bu tablo, önerilen yöntemlerle birlikte bir DataFrame'de (veya tamlık için Seride) bir şey saymak istediğiniz farklı durumları özetler.

resim açıklamasını buraya girin

Dipnotlar

  1. DataFrame.countSeriesnull olmayan sayım sütuna göre değiştiğinden her sütun için sayıları döndürür .
  2. DataFrameGroupBy.sizeSeriesaynı gruptaki tüm sütunlar aynı satır sayısını paylaştığından, a değerini döndürür .
  3. DataFrameGroupBy.countDataFramenull olmayan sayım aynı gruptaki sütunlar arasında farklılık gösterebileceğinden a değerini döndürür . Belirli bir sütun için grup bazında null olmayan sayımı elde etmek için, df.groupby(...)['x'].count()burada "x" sayılacak sütundur.

Minimum Kod Örnekleri

Aşağıda, yukarıdaki tabloda açıklanan yöntemlerin her birinin örneklerini göstereceğim. İlk olarak, kurulum -

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

Bir DataFrame Satır sayısı: len(df), df.shape[0]ya dalen(df.index)

len(df)
# 5

df.shape[0]
# 5

len(df.index)
# 5

Sabit zaman operasyonlarının performansını karşılaştırmak aptalca gözüküyor, özellikle de fark "ciddi olarak endişelenme" seviyesindeyken. Ama bu diğer cevaplarla bir eğilim gibi gözüküyor, bu yüzden aynısını tamlık için yapıyorum.

Yukarıdaki 3 yöntemden len(df.index)(diğer cevaplarda belirtildiği gibi) en hızlı olanıdır.

Not

  • Yukarıdaki tüm yöntemler, basit özellik aramaları oldukları için sabit zamanlı işlemlerdir.
  • df.shape(benzeri ndarray.shape), bir demet döndüren bir özelliktir (# Rows, # Cols). Örneğin, buradaki örnek için df.shapedöner (8, 2).

Sütun bir DataFrame arasında Sayısı: df.shape[1],len(df.columns)

df.shape[1]
# 2

len(df.columns)
# 2

Buna benzer olarak len(df.index), len(df.columns)iki yöntemin daha hızlıdır (ancak yazmak için daha fazla karakter alır).

Satır Bir Seri Sayısı: len(s), s.size,len(s.index)

len(s)
# 5

s.size
# 5

len(s.index)
# 5

s.sizeve len(s.index)hız açısından hemen hemen aynı. Ama tavsiye ederim len(df).

Not
size bir özniteliktir ve öğe sayısını döndürür (= herhangi bir Seri için satır sayısı). DataFrames, aynı sonucu döndüren bir boyut niteliği de tanımlar df.shape[0] * df.shape[1].

Null Olmayan Satır Sayısı: DataFrame.countveSeries.count

Burada açıklanan yöntemler sadece null olmayan değerleri sayar (yani NaN'ler dikkate alınmaz).

Aramak DataFrame.count, her sütun için NaN olmayan sayılar döndürür :

df.count()

A    5
B    3
dtype: int64

Seriler Series.countiçin benzer etkiyi kullanın :

s.count()
# 3

Grup bazında Satır Sayısı: GroupBy.size

İçin DataFrames, DataFrameGroupBy.sizegrup başına satır sayısını saymak için kullanın .

df.groupby('A').size()

A
a    2
b    2
c    1
dtype: int64

Benzer şekilde, Serieskullanacaksınız SeriesGroupBy.size.

s.groupby(df.A).size()

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

Her iki durumda da a Seriesdöndürülür. DataFramesTüm gruplar aynı satır sayısını paylaştığından bu da mantıklıdır .

Grup olarak Null Olmayan Satır Sayısı: GroupBy.count

Yukarıdakine benzer, ancak kullanın GroupBy.count, değil GroupBy.size. Not sizeher zaman döndürür Seriesiken countdöner bir Seriesbelirli bir sütunda ya da başka a çağrıda eğer DataFrame.

Aşağıdaki yöntemler aynı şeyi döndürür:

df.groupby('A')['B'].size()
df.groupby('A').size()

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

Bu arada, için count, elimizdeki

df.groupby('A').count()

   B
A   
a  2
b  1
c  0

... tüm GroupBy nesnesine çağrıldı, v / s,

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

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

Belirli bir sütunda çağrılır.


35

TL; DR

kullanım len(df)


len()arkadaşınız, satır sayıları olarak kullanılabilir len(df).

Alternatif olarak, bütün satırları erişebilir df.indextarafından ve tüm sütunları df.columnsve kullanmak gibi len(anyList), kullanımı listesinin sayısını almak için len(df.index)satır sayısını almak için, ve len(df.columns)kolon sayım için.

Veya kullanabilirsiniz df.shape Eğer satır sayısı sadece kullanmak erişmek istiyorsanız, birlikte satır ve sütun sayısını döndürür df.shape[0]ve sütun sayısı için sadece kullanın: df.shape[1].


19

Yukarıdaki cevaplar dışında, df.axessatır ve sütun dizinleri ile tuple almak için kullanın ve sonra len()işlevini kullanın :

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

2
Bu, orijinalin kopyası olabilecek veya olmayabilecek dizin nesnelerini döndürür; bu, uzunluğu kontrol ettikten sonra atarsanız boşa gider. Dizinde başka bir şey yapmak istemiyorsanız, KULLANMAYIN .
cs95

9

... Jan-Philip Gehrcke'nin cevabı üzerine inşa edildi.

Neden len(df)ya len(df.index)da daha hızlı df.shape[0]. Koda bak. df.shape, @propertyDataFrame yöntemini leniki kez çağıran bir yöntemdir .

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)

Ve len (df) kaputunun altında

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)daha len(df)az işlev çağrısına sahip olduğundan biraz daha hızlı olacaktır , ancak bu her zamankinden daha hızlıdır.df.shape[0]


7

RArka plandan pandalara geliyorum ve pandaların satır veya sütun seçimi söz konusu olduğunda daha karmaşık olduğunu görüyorum. Bir süre onunla güreşmek zorunda kaldım, sonra başa çıkmanın bazı yollarını buldum:

sütun sayısını almak:

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.

satır sayısını alma:

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

Bir süre Pandaları kullandıktan sonra , bence gitmeliyiz df.shape. Sırasıyla satır ve sütun sayısını döndürür.
Catbuilts

4

Zincirleme bir işlemin ortasında satır sayısını elde etmek istiyorsanız, şunları kullanabilirsiniz:

df.pipe(len)

Misal:

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

Bu, bir len()işlevin içine uzun bir ifade koymak istemiyorsanız yararlı olabilir .

Bunun __len__()yerine kullanabilirsiniz ama __len__()biraz garip görünüyor.


Bu işlemi "borulamak" istemek mantıklı görünmüyor çünkü bunu içine sokabileceğiniz başka bir şey yok (bir tamsayı döndürüyor). Ben daha çok olur count = len(df.reset_index())daha count = df.reset_index().pipe(len). Birincisi, işlev çağrısı olmadan sadece bir özellik aramasıdır.
cs95

1

Hey bunu da kullanabilirsiniz:

Diyelim ki dfveri çerçeveniz. Ardından df.shapeveri çerçevenizin şeklini verir.(row,col)

Böylece, gerekli komutu almak için aşağıdaki komutu atayın

 row = df.shape[0], col = df.shape[1]

0

Dataframe df için, verileri incelerken virgülle biçimlendirilmiş bir basılı satır sayısı kullanılır:

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

Misal:

nrow(my_df)
12,456,789

0

En çok okunabilir varyant olduğunu düşündüğüm bir veri çerçevesindeki satır miktarını bulmak için alternatif bir yöntem pandas.Index.size.

Kabul ettiğim cevaba yorum yaparken:

Şüpheli pandas.Index.sizeaslında daha hızlı olurdu len(df.index)ama timeitbilgisayarımda bana aksini söylüyor (döngü başına ~ 150 ns daha yavaş).


0

Bunun işe yarayacağından emin değilim (veriler atlanabilir), ancak bu işe yarayabilir:

*dataframe name*.tails(1)

ve bunu kullanarak, kod snippet'ini çalıştırarak ve size verilen satır numarasına bakarak satır sayısını bulabilirsiniz.


-2

dfBunlardan herhangi biri yapabilir ( DataFrame'in adıdır):

Yöntem 1: lenişlevini kullanarak :

len(df)adlı bir DataFrame'deki satır sayısını verecektir df.

Yöntem 2: countişlevi kullanma :

df[col].count()belirli bir sütundaki satır sayısını sayar col.

df.count() tüm sütunlar için satır sayısını verecektir.


3
Bu iyi bir cevap, ama bu soruya zaten yeterli cevaplar var, bu yüzden gerçekten bir şey eklemiyor.
John
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.