Bagaimana cara saya mendapatkan hitung baris dari DataFrame panda?


936

Saya mencoba untuk mendapatkan jumlah baris dataframe df dengan Panda, dan di sini adalah kode saya.

Metode 1:

total_rows = df.count
print total_rows +1

Metode 2:

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

Kedua cuplikan kode memberi saya kesalahan ini:

TypeError: jenis operan yang tidak didukung untuk +: 'instancemethod' dan 'int'

Apa yang saya lakukan salah?


12
ok saya menemukan, saya seharusnya memanggil metode tidak memeriksa properti, jadi itu harus df.count () no df.count
yemu

56
^ Berbahaya! Waspadai itu df.count()hanya akan mengembalikan jumlah baris non-NA / NaN untuk setiap kolom. Anda harus menggunakannya df.shape[0]sebagai gantinya, yang akan selalu memberi tahu Anda dengan benar jumlah baris.
smci

3
Perhatikan bahwa df.count tidak akan mengembalikan int ketika bingkai data kosong (mis., Pd.DataFrame (kolom = ["Biru", "Merah"). Hitung tidak 0)
Marcelo Bielsa

Jawaban:


1254

Anda bisa menggunakan .shapeproperti atau adil len(DataFrame.index). Namun, ada perbedaan kinerja penting ( len(DataFrame.index)tercepat):

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)

masukkan deskripsi gambar di sini

EDIT: Seperti @ Dan Allen dicatat dalam komentar len(df.index)dan df[0].count()tidak dapat dipertukarkan sebagai counttidak termasuk NaNs,


13
Ada satu alasan bagus mengapa harus digunakan shapedalam karya interaktif, daripada len (df): Mencoba penyaringan yang berbeda, saya sering perlu tahu berapa banyak item yang tersisa. Dengan bentuk saya bisa melihatnya hanya dengan menambahkan .shape setelah pemfilteran. Dengan len () pengeditan baris perintah menjadi jauh lebih rumit, bolak-balik.
K.-Michael Aye

9
Tidak akan berfungsi untuk OP, tetapi jika Anda hanya perlu tahu apakah kerangka data kosong, df.emptyadalah pilihan terbaik.
jtschoonhoven

19
Saya tahu ini sudah lama, tetapi bukan len (df.index) membutuhkan 381 nanoseconds, atau 0,381 microseconds, df.shape 3 kali lebih lambat, mengambil 1,17 mikrodetik. apakah saya melewatkan sesuatu? @root
TG

11
(3,3) matriks adalah contoh yang buruk karena tidak menunjukkan urutan bentuk tuple
xaedes

4
Bagaimana df.shape[0]lebih cepat dari len(df)atau len(df.columns)? Karena 1 ns (nanosecond) = 1000 µs (microsecond), maka 1.17µs = 1170ns, yang berarti kira-kira 3 kali lebih lambat dari 381ns
itsjef

304

Misalkan dfadalah kerangka data Anda:

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

Atau, lebih ringkasnya,

r, c = df.shape

4
Jika kumpulan data besar, len (df.index) secara signifikan lebih cepat daripada df.bentuk [0] jika Anda hanya membutuhkan jumlah baris. Saya mengujinya.
Sumit Pokhrel

145

Gunakan len(df). Ini berfungsi pada panda 0.11 atau bahkan lebih awal.

__len__()saat ini (0,12) didokumentasikan dengan Returns length of index. Info waktu, atur dengan cara yang sama seperti pada jawaban 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

Karena satu fungsi panggilan tambahan itu sedikit lebih lambat daripada memanggil len(df.index)langsung, tetapi ini seharusnya tidak memainkan peran apa pun dalam kebanyakan kasus penggunaan.


81

Bagaimana cara saya mendapatkan hitung baris dari DataFrame panda?

Tabel ini merangkum berbagai situasi di mana Anda ingin menghitung sesuatu dalam DataFrame (atau Seri, untuk kelengkapan), bersama dengan metode yang direkomendasikan.

masukkan deskripsi gambar di sini

Catatan kaki

  1. DataFrame.countmengembalikan jumlah untuk setiap kolom sebagai Serieskarena jumlah bukan nol bervariasi berdasarkan kolom.
  2. DataFrameGroupBy.sizemengembalikan a Series, karena semua kolom dalam grup yang sama berbagi jumlah baris yang sama.
  3. DataFrameGroupBy.countmengembalikan a DataFrame, karena jumlah bukan nol dapat berbeda di seluruh kolom dalam grup yang sama. Untuk mendapatkan hitungan non-null grup-bijaksana untuk kolom tertentu, gunakan di df.groupby(...)['x'].count()mana "x" adalah kolom untuk menghitung.

Contoh Kode Minimal

Di bawah ini, saya menunjukkan contoh masing-masing metode yang dijelaskan dalam tabel di atas. Pertama, pengaturan -

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

Row Hitungan DataFrame sebuah: len(df), df.shape[0], ataulen(df.index)

len(df)
# 5

df.shape[0]
# 5

len(df.index)
# 5

Tampaknya konyol untuk membandingkan kinerja operasi waktu yang konstan, terutama ketika perbedaannya ada pada tingkat "serius, jangan khawatir tentang hal itu". Tapi ini tampaknya menjadi tren dengan jawaban lain, jadi saya melakukan hal yang sama untuk kelengkapan.

Dari 3 metode di atas, len(df.index)(sebagaimana disebutkan dalam jawaban lain) adalah yang tercepat.

Catatan

  • Semua metode di atas adalah operasi waktu konstan karena mereka adalah pencarian atribut sederhana.
  • df.shape(Mirip dengan ndarray.shape) adalah atribut yang mengembalikan tuple dari (# Rows, # Cols). Misalnya, df.shapekembalikan (8, 2)untuk contoh di sini.

Kolom Hitungan DataFrame sebuah: df.shape[1],len(df.columns)

df.shape[1]
# 2

len(df.columns)
# 2

Analog dengan len(df.index), len(df.columns)adalah yang tercepat dari kedua metode (tetapi membutuhkan lebih banyak karakter untuk mengetik).

Row Hitungan Seri: len(s), s.size,len(s.index)

len(s)
# 5

s.size
# 5

len(s.index)
# 5

s.sizedan len(s.index)hampir sama dalam hal kecepatan. Tapi saya rekomendasikan len(df).

Catatan
size adalah atribut, dan mengembalikan jumlah elemen (= jumlah baris untuk Seri apa pun). DataFrames juga mendefinisikan atribut ukuran yang mengembalikan hasil yang sama dengan df.shape[0] * df.shape[1].

Hitungan Baris Non-Null: DataFrame.countdanSeries.count

Metode yang dijelaskan di sini hanya menghitung nilai-nilai non-nol (artinya NaN diabaikan).

Memanggil DataFrame.countakan mengembalikan jumlah non-NaN untuk setiap kolom:

df.count()

A    5
B    3
dtype: int64

Untuk Seri, gunakan Series.countefek yang serupa:

s.count()
# 3

Hitungan Baris menurut Kelompok: GroupBy.size

Untuk DataFrames, gunakan DataFrameGroupBy.sizeuntuk menghitung jumlah baris per grup.

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

A
a    2
b    2
c    1
dtype: int64

Demikian pula, untuk Series, Anda akan menggunakan SeriesGroupBy.size.

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

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

Dalam kedua kasus, a Seriesdikembalikan. Ini masuk akal DataFramesjuga karena semua grup memiliki jumlah baris yang sama.

Hitungan Baris Non-Null Kelompok-bijaksana: GroupBy.count

Mirip dengan di atas, tetapi gunakan GroupBy.count, tidak GroupBy.size. Perhatikan bahwa sizeselalu mengembalikan a Series, sementara countmengembalikan a Seriesjika dipanggil pada kolom tertentu, atau a DataFrame.

Metode berikut mengembalikan hal yang sama:

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

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

Sementara itu, untuk count, sudah

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

   B
A   
a  2
b  1
c  0

... memanggil seluruh objek GroupBy, v / s,

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

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

Dipanggil pada kolom tertentu.


35

TL; DR

menggunakan len(df)


len()adalah teman Anda, dapat digunakan untuk jumlah baris sebagai len(df).

Atau, Anda dapat mengakses semua baris dengan df.indexdan semua kolom dengan df.columns, dan karena Anda dapat menggunakan len(anyList)untuk mendapatkan hitungan daftar, gunakan len(df.index)untuk mendapatkan jumlah baris, dan len(df.columns)untuk jumlah kolom.

Atau, Anda dapat menggunakan df.shapeyang mengembalikan jumlah baris dan kolom bersama-sama, jika Anda ingin mengakses jumlah baris hanya menggunakan df.shape[0]dan untuk jumlah kolom hanya menggunakan: df.shape[1].


19

Terlepas dari jawaban di atas, dapat digunakan df.axesuntuk mendapatkan tuple dengan indeks baris dan kolom dan kemudian menggunakan len()fungsi:

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

2
Ini mengembalikan objek indeks, yang mungkin atau mungkin bukan salinan asli, yang sia-sia jika Anda hanya membuangnya setelah memeriksa panjangnya. Kecuali Anda bermaksud melakukan hal lain dengan indeks, JANGAN GUNAKAN .
cs95

9

... membangun jawaban Jan-Philip Gehrcke.

Alasan mengapa len(df)atau len(df.index)lebih cepat daripada df.shape[0]. Lihatlah kodenya. df.shape adalah @propertyyang menjalankan metode DataFrame memanggil lendua kali.

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)

Dan di bawah tudung len (df)

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)akan sedikit lebih cepat daripada len(df)karena memiliki satu panggilan fungsi kurang, tetapi ini selalu lebih cepat daripadadf.shape[0]


7

Saya datang ke panda dari Rlatar belakang, dan saya melihat panda lebih rumit ketika memilih baris atau kolom. Saya harus bergulat dengan itu untuk sementara waktu, kemudian saya menemukan beberapa cara untuk menghadapinya:

mendapatkan jumlah kolom:

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.

mendapatkan jumlah baris:

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

Setelah menggunakan Panda untuk sementara waktu, saya pikir kita harus pergi df.shape. Ini mengembalikan jumlah baris dan kolom masing-masing.
Catbuilts

4

Jika Anda ingin mendapatkan jumlah baris di tengah operasi yang dirantai, Anda dapat menggunakan:

df.pipe(len)

Contoh:

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

Ini bisa berguna jika Anda tidak ingin meletakkan pernyataan panjang di dalam suatu len()fungsi.

Anda bisa menggunakan __len__()tetapi __len__()terlihat agak aneh.


Tampaknya tidak ada gunanya ingin "mem-pipe" operasi ini karena tidak ada lagi yang bisa Anda pipirkan (mengembalikan integer). Saya lebih suka count = len(df.reset_index())daripada count = df.reset_index().pipe(len). Yang pertama hanyalah pencarian atribut tanpa pemanggilan fungsi.
cs95

1

Hai Anda dapat menggunakan melakukan ini juga:

Katakanlah dfadalah kerangka data Anda. Kemudian df.shapememberi Anda bentuk yaitu dataframe Anda(row,col)

Jadi, berikan perintah di bawah ini untuk mendapatkan yang dibutuhkan

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

0

Untuk dataframe df, jumlah baris yang diformat koma dicetak digunakan saat menjelajahi data:

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

Contoh:

nrow(my_df)
12,456,789

0

Metode alternatif untuk mengetahui jumlah baris dalam dataframe yang menurut saya adalah varian yang paling mudah dibaca adalah pandas.Index.size.

Perhatikan bahwa ketika saya mengomentari jawaban yang diterima:

Diduga pandas.Index.sizesebenarnya akan lebih cepat daripada len(df.index)tetapi timeitdi komputer saya mengatakan sebaliknya (~ 150 ns lebih lambat per loop).


0

Saya tidak yakin apakah ini akan berhasil (data DAPAT dihilangkan), tetapi ini mungkin berhasil:

*dataframe name*.tails(1)

dan kemudian menggunakan ini, Anda bisa menemukan jumlah baris dengan menjalankan potongan kode dan melihat nomor baris yang diberikan kepada Anda.


-2

Salah satu dari ini dapat dilakukan ( dfadalah nama DataFrame):

Metode 1: Menggunakan lenfungsi:

len(df)akan memberikan jumlah baris dalam nama DataFrame df.

Metode 2: menggunakan countfungsi:

df[col].count()akan menghitung jumlah baris dalam kolom yang diberikan col.

df.count() akan memberikan jumlah baris untuk semua kolom.


3
Ini adalah jawaban yang bagus, tetapi sudah ada jawaban yang cukup untuk pertanyaan ini, jadi ini tidak benar-benar menambahkan apa pun.
John
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.