为了账号安全,请及时绑定邮箱和手机立即绑定

将多行的值更改为 NaN 时出现问题

将多行的值更改为 NaN 时出现问题

catspeake 2023-08-22 15:28:15
我有这个数据框: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并且不断出现这个错误:我一直在尝试纠正它,但我还没有找到方法。
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您的堆栈跟踪包含KeyError: 15,因此您可能尝试检索 key == just 15的行,但您的 DataFrame 不包含这样的键。

现在如何正确有效地完成您的任务。在有问题的列上使用mask ,并使用inplace

df.WEATHER.mask(df.WEATHER.str.lower().isin(['other', 'unknown']), np.nan, inplace=True)

为了提供正确的处理,无论字母大小写如何(例如other或 OTHER),我将原始值转换为小写,然后与“禁止”列表进行比较。


查看完整回答
反对 回复 2023-08-22
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

通常,您希望避免迭代 pandas 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。


查看完整回答
反对 回复 2023-08-22
  • 2 回答
  • 0 关注
  • 1549 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信