问题描述
我要检查数据帧的整列是否为空!所以说我有
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)
,但返回的错误信息为我,但我不明白为什么。那么我该如何验证呢?
谢谢
解决方法
如果有空格,
可能不是全部''
,所以最好在这里使用regex
,然后我们可以使用Series.isna()
和Series.all()
df['Data2'].replace(r'^\s*$',np.nan,regex=True).isna().all()
,
您可以先将Series
转换为''(Blank)
,然后再转换np.nan
,以检查dropna()
是否为空:
In [2530]: import numpy as np
In [2531]: df.Data2 = df.Data2.replace('',np.nan)
In [2533]: df.Data2.dropna().empty
Out[2533]: True
,
空格也是一个字符,因此,如果要编写此字符,则始终为false
data2 = [None,None,None]
df = pd.DataFrame(list(zip(data1,data2)),columns = ['Data1','Data2'])
print(df)
当您检查以下内容时:
print(df['Data2'].empty)
返回True
,有时候,您需要检查多个列是否为空,如果要查看,则要知道哪些列为空(而不是一次检查一列)。
您可以通过以下方式实现:
- 用
''
代替空白值np.nan
- 检查数据框具有空值
.isna()
的地方 - 然后通过
.all()
检查是否有任何列完全用空值填充。
样本数据
data1 = [12,34,'',678,896]
data2 = ['','']
data3 = ['','']
data4 = [10,11,6,'']
df = pd.DataFrame(list(zip(data1,data2,data3,data4)),'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
值对应的列是非完全为空。