Преобразовать значения столбца в NaN, используя np.where - PullRequest
0 голосов
/ 31 января 2019

Я не могу понять, как использовать результаты индекса из np.where в цикле for.Я хочу использовать это для цикла ТОЛЬКО для изменения значений столбца с учетом результатов индекса np.where.

Это гипотетический пример для ситуации, когда я хочу найти индексированное местоположение определенных проблем или аномалийв моем наборе данных возьмите их местоположения с помощью np.where, а затем запустите цикл на кадре данных, чтобы перекодировать их как NaN, оставив при этом все остальные индексы без изменений.

Вот моя простая попытка кода на данный момент:

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 голосов
/ 31 января 2019

Вы можете непосредственно присвоить столбцу:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...