如何根据Pandas中另一列的值替换NAN值

oxalkeyp  于 2022-12-10  发布在  其他
关注(0)|答案(3)|浏览(146)

我使用的乳腺癌-威斯康星州数据集如下所示:x1c 0d1x
裸核列有16个缺失的条目,用“?”表示,我用NAN替换,如下所示:

df.replace('?', np.NAN, regex=False, inplace = True)

导致以下结果(16个缺失条目中的几个):

我想用每个类中出现频率最高的值来替换NAN。详细说明一下,“裸核”列中出现频率最高的值class=2(良性癌症)应用来替换所有“裸核”== NAN且Class == 2的行。class = 4(恶性)也是如此。
我尝试了以下方法:
df[df['Class']== 2]['Bare Nuclei'].fillna(df_vals[df_vals['Class']==2]['Bare Nuclei'].mode(), inplace=True)
df[df['Class']== 4]['Bare Nuclei'].fillna(df_vals[df_vals['Class']==4]['Bare Nuclei'].mode(), inplace=True)
它没有导致任何错误,但当我尝试这个:
df.isnull().any()
裸原子核显示“真”,这意味着NAN值仍然存在。

(“裸核”列属于对象类型)

我不知道我做错了什么。请帮帮忙!谢谢。

2ul0zpep

2ul0zpep1#

您可以通过groupby() + agg() + fillna()进行尝试:

s=df_vals.groupby('class')['Bare Nuclei'].agg(lambda x:x.mode(dropna=False).iat[0])
df['Bare Nuclei']=df['Bare Nuclei'].fillna(df['class'].map(s))


通过使用loc方法:

df.loc[df['Class']== 2,'Bare Nuclei'].fillna(df_vals.loc[df_vals['Class']==2,'Bare Nuclei'].mode(), inplace=True)
eulz3vhy

eulz3vhy2#

作为一个迟来的答案,如果您想用“类”列中的值替换“裸原子核”列中的每个NaN:

selection_condition = pd.isna(df["Bare Nuclei"])
df["Bare Nuclei"].iloc[selection_condition] = df[selection_condition]["Class"]

如果您希望针对特定班级进行更换:

selection_condition = pd.isna(df["Bare Nuclei"]) & (df["Class"] == 2)
df["Bare Nuclei"].iloc[selection_condition] = df[selection_condition]["Class"]
7dl7o3gd

7dl7o3gd3#

file.info()
file['Bare Nuclei'].loc[file['Bare Nuclei'] == '?'] = panda.nan

file.dropna(inplace = True)
file.drop(['Sample code number'],axis = 1,inplace = True)
file['Bare Nuclei'] = file.astype({"Bare Nuclei": int})

from sklearn.metrics import accuracy_score
for i in range(num_split):
    first = filename.drop(['Class','Bare Nuclei'],axis=1)
    second = filename['Class'].values
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.8, random_state = 0)
    classifier = LogisticRegression(max_iter = 200, solver = 'newton-cg')
    classifier.fit(x_train, y_train)
    Sk_overall = Sk_overall + classifier.score(x_test,y_test)
    Sk_Accuracy = Sk_overall/i

相关问题