微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多行的值更改为NaN的问题

如何解决将多行的值更改为NaN的问题

我有这个DataFrame:

test = database[['WEATHER']]

enter image description here

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

错误不断出现:

enter image description here

我一直在试图纠正它,但是我没有找到解决方法

解决方法

通常,您要避免迭代大熊猫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.anp.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 举报,一经查实,本站将立刻删除。