将多行的值更改为 NaN 的问题
Problem with changing value of multiple rows to NaN
我有这个数据框:
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
并且这个错误不断出现:
我一直在尝试更正它,但我还没有找到方法。
通常,您希望避免迭代 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
.
您的堆栈跟踪包含 KeyError: 15,因此您可能试图
使用 key == just 15 检索行,但您的 DataFrame 不包含
这么一把钥匙。
以及现在如何正确有效地完成您的任务。
在有问题的列上使用 mask,inplace:
df.WEATHER.mask(df.WEATHER.str.lower().isin(['other', 'unknown']), np.nan, inplace=True)
无论字母大小写如何都提供正确的处理(例如 其他 或
OTHER), 我将原始值转换为小写,然后与
“禁止”列表。
我有这个数据框:
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
并且这个错误不断出现:
我一直在尝试更正它,但我还没有找到方法。
通常,您希望避免迭代 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
.
您的堆栈跟踪包含 KeyError: 15,因此您可能试图 使用 key == just 15 检索行,但您的 DataFrame 不包含 这么一把钥匙。
以及现在如何正确有效地完成您的任务。 在有问题的列上使用 mask,inplace:
df.WEATHER.mask(df.WEATHER.str.lower().isin(['other', 'unknown']), np.nan, inplace=True)
无论字母大小写如何都提供正确的处理(例如 其他 或 OTHER), 我将原始值转换为小写,然后与 “禁止”列表。