Pandas设置列的多行的值

  • 本文关键字:Pandas 设置 python pandas
  • 更新时间 :
  • 英文 :


i有一个dataframe( train(,其中包含Age列。此列缺少值。我将其与另一个具有Age列的DataFrame-static_values合并。我正在使用以下行来代替train df中的Age列的缺失值。

predicted_vals = pd.merge(static_vals, train, on=['Pclass','Sex'])
# num of missing values
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'].isna().sum() # 177
predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y'] = predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']

运行上述行后,我运行以下内容以查看值是否已替换 -

predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']

这是我得到的推杆 -

Series([], Name: Age_x, dtype: float64)

它的空。没有发生任务。奇怪的部分是,当我在运行上述行之后检查Age_x列的值时,我也会在那里得到一个空白。

>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x']
Series([], Name: Age_x, dtype: float64)

以下是列在运行试图分配缺失值的线之前的列所保留的

>>> predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_x'].head()
3     34.240964
8     34.240964
15    34.240964
25    34.240964
34    34.240964

我在这里在这里搜索了类似的问题,但所有这些都涉及为许多行分配一个值。我不知道这里有什么问题。有帮助吗?

实际上有问题吗? predicted_vals.loc[predicted_vals['Age_y'].isna(),'Age_y']应该是空的,因为您已经填写了值!尝试predicted_vals.loc[~predicted_vals['Age_y'].isna(),'Age_y']

这是一种替代解决方案,避免合并和处理列名称后缀。我们对齐两个索引,并使用fillnastatic_vals映射。

predicted_vals = predicted_vals.set_index(['Pclass','Sex'])
predicted_vals['Age'] = predicted_vals['Age'].fillna(static_vals.set_index(['Pclass','Sex'])['Age'])
predicted_vals = predicted_vals.reset_index()

如果您想进行明确合并, @jezrael的解决方案是可以进行的。

我认为您需要combine_first

predicted_vals['Age_y'] = predicted_vals['Age_y'].combine_first(predicted_vals['Age_x'])

最新更新