【问题标题】:Pandas: How to replace Zero values in a column with the mean of that column, For all columns with Zero ValuePandas:如何用该列的平均值替换列中的零值,对于所有具有零值的列
【发布时间】:2019-03-24 00:28:12
【问题描述】:

我有一个数据框,其中多个值为零。 我想用该列的平均值替换零值而不重复代码。 我有名为运行时、预算和收入的列都为零,我想用该列的平均值替换这些零值。

我曾尝试像这样一次写一列:

    print(df['budget'].mean())    
    -> 14624286.0643    
    df['budget'] = df['budget'].replace(0, 14624286.0643)    

他们是否可以编写一个函数而不必为所有列的每个零值多次编写代码?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    同样我们可以直接使用replace方法来实现。没有 fillna

    df.replace(0,df.mean(axis=0),inplace=True)
    

    方法信息: 将“to_replace”中给出的值替换为“value”。

    DataFrame 的值被动态替换为其他值。 这不同于使用 .loc 或 .iloc 进行更新,后者需要 您可以指定要使用某个值更新的位置。

    【讨论】:

    • 假设这也考虑了 0 值是否正确?例如。如果一列的值是 1,0,2,0 会被 1 而不是 1.5 代替?
    【解决方案2】:

    所以这是 pandas 数据框,我将使用 mask 将所有 0 设置为 np.nan ,然后 fillna

    df=df.mask(df==0).fillna(df.mean())
    

    【讨论】:

    • 因为我有多个列,这是否会将零值替换为相应列的平均值,例如预算列中的 0 将替换为仅列的预算平均值以及其他具有0 个值将被这些列的平均值替换?
    • 很抱歉这是我第一次发生堆栈溢出。
    • @BobbyGee 是的,它会 :-) 用他们的方式将其替换为 0
    • 为您提供帮助。有没有什么好的资源推荐给我,让我更深入地学习 pandas 和 python 进行数据分析。
    • @BobbyGee 你可以搜索 pandas 食谱,我认为这是一个很好的开始。 :-)
    【解决方案3】:

    如何遍历所有列并替换它们?

    for col in df.columns:
        val = df[col].mean()
        df[col] = df[col].replace(0, val)
    

    【讨论】:

    • 与 pandas 内置的向量化数组操作相比,迭代通常非常慢。
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2014-08-08
    • 2022-10-14
    • 2013-09-12
    相关资源
    最近更新 更多