จะตรวจสอบว่าแพนด้า DataFrame ว่างเปล่าได้อย่างไร?


297

จะตรวจสอบได้อย่างไรว่าแพนด้าDataFrameว่างเปล่า ในกรณีของฉันฉันต้องการพิมพ์ข้อความใน terminal ถ้าDataFrameว่างเปล่า


2
len () ไม่ทำงานใช่ไหม มันควรกลับ 0 สำหรับ dataframe ว่างเปล่า
VIKASH JAISWAL

คำตอบ:


463

คุณสามารถใช้แอตทริบิวต์df.emptyเพื่อตรวจสอบว่าว่างหรือไม่:

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

ที่มา: เอกสาร Pandas


3
ดูเหมือนว่าเป็นความอัปยศเนื่องจากคุณจำเป็นต้องรู้ว่า df เป็น pd.DataFrame ฉันต้องการทราบแรงจูงใจในการไม่ใช้ bool () ใน pd.DataFrame
Quant

17
@Quant - เอกสารมีการอภิปรายเกี่ยวกับเหตุผลที่บูลทำให้เกิดข้อผิดพลาดสำหรับ dataframe ที่นี่: การเชื่อมโยง อ้างอิง: "ควรเป็นจริงเพราะไม่ใช่ความยาวเป็นศูนย์หรือไม่เท็จเพราะมีค่าเท็จหรือไม่มันไม่ชัดเจนดังนั้นนุ่นจึงเพิ่ม ValueError"
Bij

56

ฉันใช้lenฟังก์ชั่น มันเร็วกว่าemptyมาก len(df.index)เร็วยิ่งขึ้น

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
DataFrame สามารถว่างได้เนื่องจาก len (df.index) == 0 หรือ len (df.columns) == 0 เช่นกัน
มาร์ค Horvath

9

ฉันชอบเดินทางไกลมากกว่า เหล่านี้คือการตรวจสอบที่ฉันทำตามเพื่อหลีกเลี่ยงการใช้ข้อยกเว้นลอง -

  1. ตรวจสอบว่าตัวแปรไม่ใช่ไม่มี
  2. จากนั้นตรวจสอบว่าเป็นชื่อไฟล์และ
  3. ตรวจสอบให้แน่ใจว่ามันไม่ว่างเปล่า

นี่DATAคือตัวแปรต้องสงสัย -

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

2
นี่คือการปฏิบัติซ้ำซ้อนและไม่ดีหากคาดว่าตัวแปรจะเป็น DataFrame (ซึ่งเป็นสิ่งที่ OP หมายถึง) ที่ว่างเปล่าหรือมีแถว หากไม่ใช่ DF (หรือหากไม่มี) ข้อยกเว้นควรถูกโยนทิ้งเนื่องจากมีบางอย่างผิดปกติ
fgblomqvist

ใน Python try/exceptนั้นราคาถูกและifมีราคาแพง Python ไม่ใช่ทั้ง Java และ C ที่นี่มันง่ายกว่าที่จะถามการให้อภัยมากกว่าการอนุญาต
Nick Marinakis

4

ปรากฏว่าการยอมรับคำจำกัดความที่ว่างเปล่าในหัวข้อนี้เป็น dataframe ที่มีศูนย์แถวเท่านั้น แต่มีความแตกต่างระหว่างdataframe ว่างเปล่ากับศูนย์แถวและศูนย์คอลัมน์และdataframe ว่างเปล่ากับศูนย์แถวและคอลัมน์อย่างน้อยหนึ่ง ในแต่ละกรณีความยาวของดัชนีคือ 0 และว่าง = True ตามที่แสดงที่นี่:

ตัวอย่างที่ 1: dataframe ที่ว่างเปล่าที่มี 0 แถวและ 0 คอลัมน์

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

ตัวอย่างที่ 2: dataframe ที่ว่างเปล่าที่มี 0 แถวและอย่างน้อย 1 คอลัมน์

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

วิธีหนึ่งที่จะแยกแยะความแตกต่างระหว่างdataframe ที่เป็นที่ว่างของส่วนหัวและส่วนข้อมูลหรือเพียงแค่ล้างข้อมูลคือการทดสอบความยาวของดัชนีคอลัมน์ dataframe ที่ถูกโหลดครั้งแรกจะคืนค่าศูนย์คอลัมน์ส่วน dataframe ตัวที่สองจะคืนค่าจำนวนคอลัมน์ว่าง

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

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

-1
1) ถ้า DataFrame ได้รับค่าน่านและไม่ใช่ค่าว่างและคุณต้องการค้นหาว่าเป็น DataFrame หรือไม่
ว่างเปล่าหรือไม่ลองรหัสนี้
2) เมื่อสถานการณ์นี้สามารถเกิดขึ้นได้? 
สถานการณ์นี้เกิดขึ้นเมื่อใช้ฟังก์ชันเดียวเพื่อพล็อตมากกว่าหนึ่ง DataFrame 
ซึ่งจะถูกส่งเป็นพารามิเตอร์ในสถานการณ์เช่นนี้ฟังก์ชั่นพยายามที่จะลงจุดข้อมูลได้ 
เมื่อ DataFrame ว่างเปล่าและพล็อตตัวเลขที่ว่างเปล่า!
มันจะสมเหตุสมผลถ้าเพียงแค่แสดงข้อความ 'DataFrame ไม่มีข้อมูล'
3) ทำไม 
ถ้า DataFrame ว่างเปล่า (เช่นไม่มีข้อมูลเลยให้ใส่ DataFrame ด้วยค่า Nan 
ถือว่าไม่ว่างเปล่า) จากนั้นเป็นที่พึงประสงค์ที่จะไม่พล็อต แต่เขียนข้อความ:
สมมติว่าเรามี DataFrames สองรายการ df1 และ df2
ฟังก์ชัน myfunc รับ DataFrame ใด ๆ (df1 และ df2 ในกรณีนี้) และพิมพ์ข้อความ 
ถ้า DataFrame ว่างเปล่า (แทนที่จะลงจุด):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

และฟังก์ชั่น:

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

แม้ว่ารหัสนี้อาจแก้ปัญหาได้รวมถึงคำอธิบายว่าทำไมและวิธีแก้ปัญหานี้จะช่วยปรับปรุงคุณภาพการโพสต์ของคุณได้อย่างไรและอาจส่งผลให้คะแนนมากขึ้น จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่เพียงแค่คนที่ถามตอนนี้ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้ จากการทบทวน
ดับเบิลบี๊บ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.