如何解决将多行的值更改为NaN的问题
我有这个DataFrame:
test = database[['WEATHER']]
WEATHER的某些值是“ UnkNown”和“ Other”,它们的价值不高,因此我想将其更改为NaN。因此,我尝试以下代码:
for i in range(len(test)):
if test['WEATHER'][i] == "Other" or test['WEATHER'][i] == "UnkNown":
test['WEATHER'][i] = np.nan
此错误不断出现:
我一直在试图纠正它,但是我没有找到解决方法。
解决方法
通常,您要避免迭代大熊猫DataFrame
。这是我的处理方式:
>>> df.a
0 Other
1 Unknown
2 BLAH
Name: a,dtype: object
>>> df.a = np.choose(df.a.isin(['Other','Unknown']),[df.a,np.nan])
>>> df.a
0 NaN
1 NaN
2 BLAH
Name: a,dtype: object
isin()
检查每个值是否在预定义的列表['Other','Unknown']
中,并且np.choose()
根据对isin()
的布尔运算结果来确定一个值。结果是原始值df.a
或np.nan
。
您的堆栈跟踪包含 KeyError:15 ,因此您可能尝试 仅使用 15 检索键==的行,但您的DataFrame不包含 这样的钥匙。
现在介绍如何正确有效地完成任务。 在有问题的列上使用 mask ,并使用 inplace :
df.WEATHER.mask(df.WEATHER.str.lower().isin(['other','unknown']),np.nan,inplace=True)
无论字母大小写如何(例如 other 或 OTHER ),我将原始值转换为小写,然后与 “禁止”列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。