熊猫替换不会替换列的值

  • 本文关键字:替换 熊猫 pandas replace
  • 更新时间 :
  • 英文 :


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, round(dataset[dataset.Pclass == i]['Fare'].mean(),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之间波动,但我通过将平均值定义为常数进行了简化

我认为您需要:

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

最新更新