Ini sepertinya memalukan, karena Anda perlu tahu bahwa df adalah pd.DataFrame. Saya ingin mengetahui motivasi untuk tidak menerapkan bool () di pd.DataFrame.
Kuantitas
17
@Quant - Dokumentasi membahas mengapa bool memunculkan kesalahan untuk dataframe di sini: tautan . "Haruskah itu benar karena tidak panjang nol? Salah karena ada nilai-nilai salah? Tidak jelas, jadi sebaliknya, panda menimbulkan ValueError"
Bij
56
Saya menggunakan lenfungsinya. Ini jauh lebih cepat daripada empty. len(df.index)bahkan lebih cepat.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10000,4), columns=list('ABCD'))def empty(df):return df.empty
def lenz(df):return len(df)==0def lenzi(df):return len(df.index)==0'''
%timeit empty(df)
%timeit lenz(df)
%timeit lenzi(df)
10000 loops, best of 3: 13.9 µs per loop
100000 loops, best of 3: 2.34 µs per loop
1000000 loops, best of 3: 695 ns per loop
len on index seems to be faster
'''
Ini adalah praktik yang berlebihan dan buruk jika diharapkan bahwa variabel akan menjadi DataFrame (yang merupakan implikasi OP) yang kosong atau memiliki baris. Jika itu bukan DF (atau jika tidak ada), pengecualian harus dilemparkan karena ada yang tidak beres di suatu tempat.
Tampaknya definisi kosong yang diterima di utas ini adalah kerangka data dengan nol baris saja. Tetapi ada perbedaan antara kerangka data kosong dengan nol baris dan nol kolom dan kerangka data kosong dengan nol baris dan setidaknya satu kolom . Dalam setiap kasus panjang indeks adalah 0 dan kosong = Benar seperti yang ditunjukkan di sini:
Contoh 1: kosongkan kerangka data dengan 0 baris dan 0 kolom
Salah satu cara untuk membedakan antara kerangka data yang kosong header dan data atau hanya kosong data adalah dengan menguji panjang indeks kolom . Kerangka data yang dimuat pertama mengembalikan nol kolom, kerangka data kedua mengembalikan jumlah kolom kosong.
1) Jika DataFrame telah mendapatkan nilai Nan dan Non Null dan Anda ingin menemukan apakah DataFrame
kosong atau tidak maka coba kode ini.
2) kapan situasi ini bisa terjadi?
Situasi ini terjadi ketika satu fungsi digunakan untuk memplot lebih dari satu DataFrame
yang dilewatkan sebagai parameter. Dalam situasi seperti itu fungsi mencoba untuk merencanakan data secara merata
ketika DataFrame kosong dan dengan demikian petak angka kosong !.
Masuk akal jika hanya menampilkan pesan 'DataFrame tidak memiliki data'.
3) mengapa?
jika DataFrame kosong (yaitu tidak berisi data sama sekali. Ingat DataFrame dengan nilai Nan
dianggap tidak kosong) maka diinginkan untuk tidak merencanakan tetapi menyampaikan pesan:
Misalkan kita memiliki dua DataFrames df1 dan df2.
Fungsi myfunc mengambil DataFrame (df1 dan df2 dalam kasus ini) dan mencetak pesan
jika DataFrame kosong (alih-alih memplot):
df1 df2
col1 col2 col1 col2
Nan2NanNan2NanNanNan
dan fungsinya:
def myfunc(df):if(df.count().sum())>0:##count the total number of non Nan values.Equal to 0 if DataFrame is emptyprint('not empty')
df.plot(kind='barh')else:
display a message instead of plotting if it is empty
print('empty')
Meskipun kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu untuk meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan berikan indikasi tentang batasan dan asumsi apa yang berlaku. Dari Ulasan
Jawaban:
Anda dapat menggunakan atribut
df.empty
untuk memeriksa apakah itu kosong atau tidak:Sumber: Dokumentasi Pandas
sumber
Saya menggunakan
len
fungsinya. Ini jauh lebih cepat daripadaempty
.len(df.index)
bahkan lebih cepat.sumber
Saya lebih suka menempuh rute panjang. Ini adalah cek yang saya ikuti untuk menghindari penggunaan klausa coba-kecuali -
Di sini,
DATA
adalah variabel yang dicurigai -sumber
try/except
itu murah danif
mahal. Python bukan Java atau C; di sini lebih mudah untuk meminta maaf daripada izinTampaknya definisi kosong yang diterima di utas ini adalah kerangka data dengan nol baris saja. Tetapi ada perbedaan antara kerangka data kosong dengan nol baris dan nol kolom dan kerangka data kosong dengan nol baris dan setidaknya satu kolom . Dalam setiap kasus panjang indeks adalah 0 dan kosong = Benar seperti yang ditunjukkan di sini:
Contoh 1: kosongkan kerangka data dengan 0 baris dan 0 kolom
Contoh 2: kosongkan kerangka data dengan 0 baris dan setidaknya 1 kolom
Salah satu cara untuk membedakan antara kerangka data yang kosong header dan data atau hanya kosong data adalah dengan menguji panjang indeks kolom . Kerangka data yang dimuat pertama mengembalikan nol kolom, kerangka data kedua mengembalikan jumlah kolom kosong.
sumber
dan fungsinya:
sumber