使用np.where将列值转换为NaN

时间:2019-01-30 22:26:22

标签: python python-3.x pandas numpy

我无法弄清楚如何在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

1 个答案:

答案 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)