2015-08-04 2 views
2

Я новичок в python и пытаюсь научиться анализу данных с ним. У меня есть кадр данных в python (называемый «data»). Я хочу перекодировать переменную GEND, которая имеет три значения (1, 2, 3). Используя pandas, я читаю в csv-файле, используя pd.read_csv(). Я пытаюсь заменить все экземпляры «3» в переменной GEND на отсутствие (NaN). Однако я не могу понять, как это сделать. До сих пор я пытался для цикла, который не показывает ошибку, но не изменяет переменную информацию:Замена значений в кадре данных в Python

for value in data.GEND: 
if value == 3: 
    value = np.nan 

Я также попытался это, который не показывает ошибку, но

data.GEND.loc[3] = np.nan 

и это, который работает, но изменяет значение переменной ID для «3», но в остальном правильно изменяет значение «3» в переменной Gend к NaN:: также ничего не делает

data.GEND.replace(to_replace=3, value = nan) 

Что мне здесь не хватает ? Я также хотел бы знать, как я могу сделать выше, но создать новый столбец в фрейме данных, который содержит новую информацию (поэтому я могу сохранить исходные значения, если я испортил).

ответ

3

Вы можете использовать LOC для замены 3-х:

df = pd.DataFrame({'GEND':[1,2,1,2,3,1,2,3,1,2,1,2,]}) 
df.loc[df.GEND == 3, 'GEND'] = np.NaN 

GEND 
0 1 
1 2 
2 1 
3 2 
4 NaN 
5 1 
6 2 
7 NaN 
8 1 
9 2 
10 1 
11 2 

Кроме того, используя, где вы можете получить тот же результат:

df.GEND = df.GEND.where(df.GEND != 3) 
+0

Почему не мой начальный код "data.GEND.loc [3]" работать? –

+0

Это заменяет третий 'loc' на' NaN', распечатывает, что 'df.GEND.loc [3]' есть, и вы должны увидеть, что он делает. – DTing

+0

@ Daniel loc выполняет индексирование меток, поэтому возвращает только строку, где индекс равен '3' – EdChum

Смежные вопросы