我无法弄清楚如何在for循环中使用np.where的索引结果。我想用这个for循环来唯一的变化给出的np.where索引结果的列的值。
这是我想要找的我的数据集某些问题或异常的索引位置,抓住他们的位置与np.where,然后在数据帧运行一个循环重新编写他们作为楠情况假设的例子,同时留下所有其它指数不变。
这是到目前为止我的简单代码尝试:
import pandas as pd
import numpy as np
# import iris
df = pd.read_csv('https://raw.githubusercontent.com/rocketfish88/democ/master/iris.csv')
# conditional np.where -- hypothetical problem data
find_error = np.where((df['petal_length'] == 1.6) &
(df['petal_width'] == 0.2))
# loop over column to change error into NA
for i in enumerate(find_error):
df = df['species'].replace({'setosa': np.nan})
# df[i] is a problem but I cannot figure out how to get around this or an alternative
答案 0 :(得分:3)
您可以直接分配给该列:
m = (df['petal_length'] == 1.6) & (df['petal_width'] == 0.2)
df.loc[m, 'species'] = np.nan
或者,修复您的代码。
df['species'] = np.where(m, np.nan, df['species'])
或者,使用Series.mask
:
df['species'] = df['species'].mask(m)