Не применять лямбда-функцию к отсутствующим значениям

#python #pandas #apply

#python #pandas #применить

Вопрос:

У меня есть фрейм данных с диагнозом пациента в столбце, и с помощью pandas я хочу разделить диагноз ==> ISM, не ISM. Я пробовал это

 df["initial_diagnosis"] = df["initial_diagnosis"].apply(lambda x: x if x=="ISM" else "non ISM")
  

Но он присваивает «non ISM» также отсутствующим значениям. Есть ли способ сделать то же самое и сохранить отсутствующие значения такими, какие они есть?

Столбец, который я пытаюсь закодировать, выглядит следующим образом:

 initial_diagnosis    I
ISM 
ISM
WDSM
NaN
ISM
SSM
CM
ASM
ISM
  

Комментарии:

1. Было бы действительно полезно, если бы вы могли поделиться фрагментом своих данных (т. Е. df['initia_diagnosis ]) .

2. Почему бы просто не изменить функцию apply, чтобы игнорировать элементы, которые имеют значение null?

Ответ №1:

Я думаю, что это должно сработать. Вероятно, отсутствующие значения являются пустыми строками или просто отсутствуют, я могу только догадываться

 missing_values = {...} # Set of values you want to keep
df["initial_diagnosis"] = df["initial_diagnosis"].apply(lambda x: x if x=="ISM" or x in missing_values else "non ISM")
  

Редактировать:

 import pandas as pd
from numpy import nan

data = pd.read_csv("test.csv")
print(data['initial_diagnosis']) 

#0    ISM
#1     ISM
#2    WDSM
#3     NaN
#4     ISM
#5     SSM
#6      CM
#7     ASM
#8     ISM 
#Name: initial_diagnosis, dtype: object

missing_values = {nan}
data["initial_diagnosis"] = data["initial_diagnosis"].apply(lambda x: x if x =="ISM" or x in missing_values else "non ISM")
print(data['initial_diagnosis'])

#0    non ISM
#1        ISM
#2    non ISM
#3        NaN
#4        ISM
#5    non ISM
#6    non ISM
#7    non ISM
#8        ISM