我有一个通过解析一些 Excel 电子表格创建的 pd.DataFrame
。其中一列有空单元格。例如,下面是该列频率的输出,32320 条记录缺少租户值。
>>> value_counts(Tenant, normalize=False)
32320
Thunderhead 8170
Big Data Others 5700
Cloud Cruiser 5700
Partnerpedia 5700
Comcast 5700
SDP 5700
Agora 5700
dtype: int64
我试图删除缺少租户的行,但是 .isnull()
选项无法识别缺少的值。
>>> df['Tenant'].isnull().sum()
0
该列的数据类型为“对象”。在这种情况下发生了什么?如何删除缺少租户的记录?
最佳答案
如果值是 np.nan
对象,Pandas 会将其识别为 null,该对象将在 DataFrame 中打印为 NaN
。您的缺失值可能是空字符串,Pandas 不会将其识别为 null。要解决此问题,您可以使用 replace()
将空字符串(或空单元格中的任何内容)转换为 np.nan
对象,然后调用 dropna ()
在您的 DataFrame 上删除具有空租户的行。
为了进行演示,我们创建一个 DataFrame,在 Tenants
列中包含一些随机值和一些空字符串:
>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
>>> df['Tenant'] = np.random.choice(['Babar', 'Rataxes', ''], 10)
>>> print df
A B Tenant
0 -0.588412 -1.179306 Babar
1 -0.008562 0.725239
2 0.282146 0.421721 Rataxes
3 0.627611 -0.661126 Babar
4 0.805304 -0.834214
5 -0.514568 1.890647 Babar
6 -1.188436 0.294792 Rataxes
7 1.471766 -0.267807 Babar
8 -1.730745 1.358165 Rataxes
9 0.066946 0.375640
现在我们用 np.nan
对象替换 Tenants
列中的所有空字符串,如下所示:
>>> df['Tenant'].replace('', np.nan, inplace=True)
>>> print df
A B Tenant
0 -0.588412 -1.179306 Babar
1 -0.008562 0.725239 NaN
2 0.282146 0.421721 Rataxes
3 0.627611 -0.661126 Babar
4 0.805304 -0.834214 NaN
5 -0.514568 1.890647 Babar
6 -1.188436 0.294792 Rataxes
7 1.471766 -0.267807 Babar
8 -1.730745 1.358165 Rataxes
9 0.066946 0.375640 NaN
现在我们可以删除空值:
>>> df.dropna(subset=['Tenant'], inplace=True)
>>> print df
A B Tenant
0 -0.588412 -1.179306 Babar
2 0.282146 0.421721 Rataxes
3 0.627611 -0.661126 Babar
5 -0.514568 1.890647 Babar
6 -1.188436 0.294792 Rataxes
7 1.471766 -0.267807 Babar
8 -1.730745 1.358165 Rataxes
关于python - 从 pandas DataFrame 中删除包含空单元格的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708504/