Làm cách nào để kiểm tra xem DataFrame của gấu trúc có trống không?


296

Làm thế nào để kiểm tra xem một con gấu trúc DataFramecó trống không? Trong trường hợp của tôi, tôi muốn in một số tin nhắn trong thiết bị đầu cuối nếu DataFrametrống.


2
len () không hoạt động? Nó sẽ trả về 0 cho khung dữ liệu trống.
VIKASH JAISWAL

Câu trả lời:


462

Bạn có thể sử dụng thuộc tính df.emptyđể kiểm tra xem nó có trống hay không:

if df.empty:
    print('DataFrame is empty!')

Nguồn: Tài liệu về gấu trúc


3
Điều này có vẻ như là một sự xấu hổ, vì bạn cần biết rằng df là một pd.DataFrame. Tôi muốn biết động lực để không triển khai bool () trên pd.DataFrame.
Quant

17
@Quant - Tài liệu này có một cuộc thảo luận về lý do tại sao bool lại phát sinh lỗi cho một khung dữ liệu ở đây: link . Trích: "? Nó nên được True vì nó không phải là zero-length False vì có giá trị False Không rõ, vì vậy thay vào đó, gấu trúc đặt ra một ValueError"
Bij

56

Tôi sử dụng lenchức năng. Nó nhanh hơn nhiều empty. len(df.index)thậm chí còn nhanh hơn

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) == 0

def 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
'''

7
Một DataFrame có thể trống do len (df.index) == 0 hoặc len (df.columns) == 0 là tốt.
Mark Horvath

9

Tôi thích đi theo con đường dài. Đây là những kiểm tra tôi làm theo để tránh sử dụng mệnh đề thử ngoại trừ -

  1. kiểm tra nếu biến không phải là Không
  2. sau đó kiểm tra xem đó là một khung dữ liệu và
  3. đảm bảo nó không trống

Đây DATAlà biến nghi ngờ -

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty

2
Điều này là dư thừa và thực tiễn tồi nếu dự đoán rằng biến đó sẽ là DataFrame (đó là những gì OP ngụ ý) trống hoặc có hàng. Nếu đó không phải là DF (hoặc nếu không có), một ngoại lệ sẽ được đưa ra do có sự cố xảy ra ở đâu đó.
fgblomqvist

Trong Python, try/exceptrẻ và ifđắt tiền. Python không phải là Java hay C; ở đây thật dễ dàng để yêu cầu sự tha thứ hơn là sự cho phép
Nick Marinakis

4

Dường như định nghĩa trống được chấp nhận trong luồng này là một khung dữ liệu chỉ có các hàng bằng không. Nhưng có một sự khác biệt giữa một khung dữ liệu trống với các hàng bằng 0các cột bằng 0 và một khung dữ liệu trống có các hàng bằng 0 và ít nhất một cột . Trong mỗi trường hợp, độ dài của chỉ mục là 0 và rỗng = Đúng như được hiển thị ở đây:

Ví dụ 1: khung dữ liệu trống với 0 hàng và 0 cột

In [1]: import pandas as pd
        df1 = pd.DataFrame()
        df1
Out[1]: Empty DataFrame
        Columns: []
        Index: []

In [2]: len(df1.index)
Out[2]: 0

In [3]: df1.empty
Out[3]: True

Ví dụ 2: khung dữ liệu trống có 0 hàng và ít nhất 1 cột

In [4]: df2 = pd.DataFrame({'AA' : [], 'BB' : []})
        df2
Out[4]: Empty DataFrame
        Columns: [AA, BB]
        Index: []

In [5]: len(df2.index)
Out[5]: 0

In [6]: df2.empty
Out[6]: True

Một cách để phân biệt giữa một khung dữ liệu trống các tiêu đề và dữ liệu hoặc chỉ trống dữ liệukiểm tra độ dài của chỉ mục cột . Khung dữ liệu được tải đầu tiên trả về các cột bằng 0, khung dữ liệu thứ hai trả về số lượng cột trống.

In [7]: len(df1.columns)
Out[7]: 0

In [8]: len(df2.columns)
Out[8]: 2

-1
1) Nếu DataFrame có các giá trị Nan và Non Null và bạn muốn tìm xem liệu DataFrame
trống hay không thì thử mã này.
2) khi tình huống này có thể xảy ra? 
Tình huống này xảy ra khi một hàm duy nhất được sử dụng để vẽ nhiều hơn một DataFrame 
được truyền dưới dạng tham số. Trong tình huống như vậy, hàm cố gắng vẽ đồ thị dữ liệu 
khi DataFrame trống và do đó vẽ một hình trống!.
Sẽ có ý nghĩa nếu chỉ hiển thị thông báo 'DataFrame không có dữ liệu'.
3) tại sao? 
nếu DataFrame trống (nghĩa là không chứa dữ liệu nào cả. Cho bạn DataFrame với các giá trị Nan 
được coi là không trống) thì không nên âm mưu mà đưa ra một thông điệp:
Giả sử chúng ta có hai DataFrames df1 và df2.
Hàm myfunc lấy bất kỳ DataFrame nào (df1 và df2 trong trường hợp này) và in một thông báo 
nếu DataFrame trống (thay vì âm mưu):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

và chức năng:

def myfunc(df):
  if (df.count().sum())>0: ##count the total number of non Nan values.Equal to 0 if DataFrame is empty
     print('not empty')
     df.plot(kind='barh')
  else:
     display a message instead of plotting if it is empty
     print('empty')

Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do giải quyết vấn đề này thực sự sẽ giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều lượt bình chọn hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những hạn chế và giả định được áp dụng. Từ đánh giá
tiếng bíp đôi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.