Python : 如何检查 Dataframe 的一整列内容是否为空?

Python : How can I check if the content of one entire column of a Dataframe is empty?

我想检查数据框的一整列是否为空!所以假设我有

data1 = [12,34,'',678,896]
data2 = ['','','','','']

df = pd.DataFrame(list(zip(data1,data2)),columns = ['Data1','Data2'])
print(df)

   Data1 Data2
0     12
1     34
2    
3    678
4    896

“Data1”列有数据,“Data2”列为空。我尝试了函数 print(df['Data2'].empty),但它 returns 我不明白为什么。那么我该如何验证呢?

谢谢

您可以通过先将 ''(Blank) 转换为 np.nan 然后 dropna():

来检查 Series 是否为空
In [2530]: import numpy as np
In [2531]: df.Data2 = df.Data2.replace('', np.nan)

In [2533]: df.Data2.dropna().empty
Out[2533]: True

空格也是一个字符,因此你总是有假,如果你想写这个

data2 = [None,None,None,None,None]

df = pd.DataFrame(list(zip(data1,data2)),columns = ['Data1','Data2'])
print(df)

当你检查这个时:

print(df['Data2'].empty)

这是return正确

如果有空格, 可能不是全部''所以这里用regex比较好,然后我们可以用Series.isna() and Series.all()

df['Data2'].replace(r'^\s*$', np.nan, regex=True).isna().all()

有时您会想检查多个列是否为空,如果是,您会想知道哪些是空的(而不是一次检查 1 列)。

您可以通过以下方式完成此操作:

  1. 将空白值 '' 替换为 np.nan
  2. 检查数据框的空值位置.isna()
  3. 然后通过 .all().
  4. 检查是否有任何列完全被空值填充

示例数据

data1 = [12,34,'',678,896]
data2 = ['','','','','']
data3 = ['','','','','']
data4 = [10, '', 11, 6, '']

df = pd.DataFrame(list(zip(data1,data2, data3, data4)),columns = ['Data1','Data2', 'Data3', 'Data4'])

print(df)
  Data1 Data2 Data3 Data4
0    12                10
1    34                  
2                      11
3   678                 6
4   896                  

方法

out = df.replace('', np.nan).isna().all()

print(out)
Data1    False
Data2     True
Data3     True
Data4    False
dtype: bool

在结果 out 中,我们可以看到有 True 个值对应于完全为空的列,False 个值对应于 列不是完全是空的。