如何解决熊猫替换不会替换列的值
Stackoverflow的访问者。
我有一个数据集的一部分,希望将其值替换为另一个值。 例如:
data_train[data_train.Fare < 6]['Fare']
显示此输出:
179 0.0000
263 0.0000
271 0.0000
277 0.0000
302 0.0000
378 4.0125
413 0.0000
466 0.0000
481 0.0000
597 0.0000
633 0.0000
674 0.0000
732 0.0000
806 0.0000
815 0.0000
822 0.0000
872 5.0000
此外,我使用for
循环来替换所有数据集中的0值。并且此循环中的第一个迭代应替换data_train
。但是,输出保持不变(仅0)。
for dataset in [data_train,data_test]:
lower_margin = 6 if 'Survived' in dataset else 3
classes = dataset[dataset.Fare < lower_margin]['Pclass'].unique()
for i in classes:
dataset[dataset.Fare < lower_margin].loc[dataset.Pclass == i]['Fare'].replace(0.0000,round(dataset[dataset.Pclass == i]['Fare'].mean(),4),inplace=True)
我试图重新分配被替换的系列,但是它也不起作用。
dataset[dataset.Fare < lower_margin].loc[dataset.Pclass == i]['Fare'] = dataset[dataset.Fare < lower_margin].loc[dataset.Pclass == i]['Fare'].replace(0.0000,4))
我可能错过了一些东西,但我不知道到底是什么。
更新
预期输出应如下所示:
179 84.1234
263 84.1234
271 84.1234
277 84.1234
302 84.1234
378 84.1234
413 84.1234
466 84.1234
481 84.1234
597 84.1234
633 84.1234
674 84.1234
732 84.1234
806 84.1234
815 84.1234
822 84.1234
872 84.1234
其中
round(dataset[dataset.Pclass == i]['Fare'].mean(),4) == 84.1234
注意:平均值从Pclass到Pclass波动,但是我通过将平均值定义为常量来简化了此操作。
解决方法
我相信您需要:
print (data_train)
Fare Pclass
179 2.5000 1
263 0.0000 1
271 30.0000 2
277 20.0000 2
302 0.0000 3
378 4.0125 3
out = []
for dataset in [data_train,data_test]:
lower_margin = 6 if 'Survived' in dataset else 3
#filters
m1 = dataset.Fare < lower_margin
m2 = dataset.Fare == 0
#filtering DataFrame by treshold and aggregate mean
avg = dataset[m1].groupby('Pclass')['Fare'].mean()
#replaced only 0 values by mapped averages
dataset.loc[m2,'Fare'] = dataset.loc[m2,'Pclass'].map(avg)
out.append(dataset)
print (out[0])
Fare Pclass
179 2.5000 1
263 1.2500 1 <-correct replaced by mean
271 30.0000 2
277 20.0000 2
302 0.0000 3
378 4.0125 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。