【问题标题】:Replacing missing data in pandas.DataFrame not working替换 pandas.DataFrame 中缺失的数据不起作用
【发布时间】:2014-09-16 16:46:08
【问题描述】:

我正在挖掘Kaggle's Titanic excercise

我有一个 pandas.DataFrame,其中“年龄”列有一些分散的 NaN' 值,另一个名为 IsAlone 的列是我创建的,其值是 10,这取决于该人独自在那艘船上个人规则。

我正在尝试将 Age 列上的 NaN 值替换为独处者的平均年龄,以及不独处者的平均年龄。目的只是练习 pandas DataFrame,根据规则替换 NaN 值。

我对那些孤独的人这样做:

df_train[(df_train.IsAlone.astype(bool) & df_train.Age.isnull() )].Age = \
    df_train[(df_train.IsAlone.astype(bool) & ~df_train.Age.isnull() )].Age.mean()

对于那些并不孤单的人也是如此:

df_train[(~df_train.IsAlone.astype(bool) & df_train.Age.isnull() )].Age = \
    df_train[(~df_train.IsAlone.astype(bool) & ~df_train.Age.isnull() )].Age.mean()

但这根本不起作用,Age 列仍然具有相同的NaN 值。

对此有什么想法吗?

【问题讨论】:

  • 显示示例数据和预期结果。
  • 试试df_train.loc[ that condition here, 'Age'] = whatever
  • @behzad.nouri 效果很好!谢谢。能否请您详细说明一个简短的答案以获得奖品?

标签: python pandas dataframe nan boolean-logic


【解决方案1】:

问题是在原始帧的副本上更改了值。详情请参阅Returning a view versus a copy。如文档中所述:

在 Pandas 对象中设置值时,必须注意避免所谓的链式索引

要更改原始框架的 视图 上的值,您可以这样做:

j = df_train.IsAlone.astype(bool) & df_train.Age.isnull()
i = df_train.IsAlone.astype(bool) & ~df_train.Age.isnull()
df_train.loc[j, 'Age'] = df_train.loc[i, 'Age'].mean()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2023-02-22
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多