首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据熊猫另一栏中的值替换NAN值

如何根据熊猫另一栏中的值替换NAN值
EN

Stack Overflow用户
提问于 2021-08-17 04:45:33
回答 3查看 1.3K关注 0票数 1

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

裸核心列有16个缺失条目,表示为"?“我将其替换为NAN如下:

代码语言:javascript
复制
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值仍然存在。

(列“裸核”为对象类型)

我不明白我做错了什么。请帮帮我!谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-17 05:01:50

你可以通过groupby()+agg()+fillna()试试

代码语言:javascript
复制
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

代码语言:javascript
复制
df.loc[df['Class']== 2,'Bare Nuclei'].fillna(df_vals.loc[df_vals['Class']==2,'Bare Nuclei'].mode(), inplace=True)
票数 2
EN

Stack Overflow用户

发布于 2021-12-10 16:56:44

作为一个迟来的回答,如果您想将“裸核心”列中的每个NaN替换为列“Class”中的值:

代码语言:javascript
复制
selection_condition = pd.isna(df["Bare Nuclei"])
df["Bare Nuclei"].iloc[selection_condition] = df[selection_condition]["Class"]

如果您希望在替换方面具有特定于类的内容:

代码语言:javascript
复制
selection_condition = pd.isna(df["Bare Nuclei"]) & (df["Class"] == 2)
df["Bare Nuclei"].iloc[selection_condition] = df[selection_condition]["Class"]
票数 0
EN

Stack Overflow用户

发布于 2022-12-03 06:17:31

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68811809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档