замена панд не заменяет значение даже с inplace = True - PullRequest
4 голосов
/ 29 сентября 2019

Мои данные выглядят так.Я хотел бы заменить marital_status 'Missing' на 'Married', если 'no_of_children' не nan.

>cust_data_df[['marital_status','no_of_children']]
>

    marital_status  no_of_children

0   Married           NaN
1   Married           NaN
2   Missing            1
3   Missing            2
4   Single            NaN
5   Single            NaN
6   Married           NaN
7   Single            NaN
8   Married           NaN
9   Married           NaN
10  Single            NaN

Это то, что я пытался:

cust_data_df.loc[cust_data_df['no_of_children'].notna()==True, 'marital_status'].replace({'Missing':'Married'},inplace=True)

Но этоничего не делать.

1 Ответ

4 голосов
/ 29 сентября 2019

Назначьте обратно замененные значения, чтобы избежать цепных назначений :

m = cust_data_df['no_of_children'].notna()
d = {'Missing':'Married'}
cust_data_df.loc[m, 'marital_status'] = cust_data_df.loc[m, 'marital_status'].replace(d)

При необходимости установите все значения:

cust_data_df.loc[m, 'marital_status'] = 'Married'

РЕДАКТИРОВАТЬ:

Спасибо @ Quickbeam2k1 за объяснение:

cust_data_df.loc [cust_data_df ['no_of_children']. Notna () == True, 'marital_status'] - это просто новый объект, который имеетнет ссылки.Замена там, оставит исходный объект без изменений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...