我正在使用乳腺癌-威斯康星州数据集,如下所示:

裸核心列有16个缺失条目,表示为"?“我将其替换为NAN如下:
df.replace('?', np.NAN, regex=False, inplace = True)其结果是(16个缺失条目中的几个):

对于每个类,我想用最常见的值替换NAN。为了详细说明,在具有class=2 (良性癌)的“裸核”列中,最常见的值应该用来替换所有具有“裸核”== NAN和== 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值仍然存在。
(列“裸核”为对象类型)
我不明白我做错了什么。请帮帮我!谢谢。
发布于 2021-08-17 05:01:50
你可以通过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)发布于 2021-12-10 16:56:44
作为一个迟来的回答,如果您想将“裸核心”列中的每个NaN替换为列“Class”中的值:
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"]发布于 2022-12-03 06:17:31
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/ihttps://stackoverflow.com/questions/68811809
复制相似问题