【问题标题】:Problem with changing value of multiple rows to NaN将多行的值更改为 NaN 的问题
【发布时间】:2021-01-06 18:38:02
【问题描述】:

我有这个数据框:

test = database[['WEATHER']]

WEATHER 的一些值是“未知”和“其他”,它们并没有带来太多价值,所以我想将它们更改为 NaN。因此,我尝试以下代码:

for i in range(len(test)):
if test['WEATHER'][i] == "Other" or test['WEATHER'][i] == "Unknown":
    test['WEATHER'][i] = np.nan

而且这个错误一直出现:

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

【问题讨论】:

  • 你为什么不试试df.replace

标签: python numpy dataframe for-loop nan


【解决方案1】:

通常,您希望避免迭代 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.anp.nan

【讨论】:

    【解决方案2】:

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

    现在如何正确有效地完成任务。 在有问题的列上使用 maskinplace:

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

    无论字母大小写如何(例如 other其他),我将原始值转换为小写,然后与 一个“禁止”列表。

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 2021-08-26
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多