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 列)。
您可以通过以下方式完成此操作:
- 将空白值
''
替换为 np.nan
- 检查数据框的空值位置
.isna()
- 然后通过
.all()
. 检查是否有任何列完全被空值填充
示例数据
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
个值对应于 列不是完全是空的。
我想检查数据框的一整列是否为空!所以假设我有
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 列)。
您可以通过以下方式完成此操作:
- 将空白值
''
替换为np.nan
- 检查数据框的空值位置
.isna()
- 然后通过
.all()
. 检查是否有任何列完全被空值填充
示例数据
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
个值对应于 列不是完全是空的。