如何使用数据框上的某些条件仅替换零

时间:2020-07-29 18:59:24

标签: python pandas numpy dataframe mean

我已经搜索了许多地方,但仍然无法以自己的逻辑提出,也无法在互联网上找到...

问题 我在执行EDA时有学生成绩数据集,但遇到了一个小问题

例如,为什么学生缺勤率为零,而其最终成绩却为零。 对于一个学生来说,要整整一年都出席,而在决赛中仍然保持零分是不可能的

所以我决定使用

过滤掉这两列中所有带有零的行
dataset[(dataset['G3']==0)&(dataset['absences']==0)]

但是这返回了一个数据框 所以我尝试了

dataset.loc[(dataset['G3']==0)&(dataset['absences']==0),['G3','absences']]

这使我返回了两列满足条件的列,我想要的是替换“ G3”列和“缺席”列 zeroes ,分别替换为它们表示并且也不要打扰数据框

我试图用

替换它们
dataset.loc[(dataset['G3']==0)&(dataset['absences']==0),['G3','absences']].replace(0,np.mean[dataset[['G3','absences']]])

i got this series of Zero containing columns

这使我出错

function object cannot be subscriptable 

我不知道该怎么办

我尝试了很多事情,但是仍然无法解决这个问题,任何解决方案都可能会帮助

预先感谢

1 个答案:

答案 0 :(得分:1)

如果要用值的子集的平均值!= 0代替,则可以使用

dataset = pd.DataFrame({'G3': np.random.randint(0,3,100), 
                         'absences' : np.random.randint(0,3,100)})

dataset.loc[(dataset['G3']==0)&(dataset['absences']==0),['G3', 'absences']] = [dataset.loc[(dataset['G3']!=0)]['G3'].mean(), dataset.loc[(dataset['absences']!=0)]['absences'].mean()]