Pandas:如何将列中的零值替换为该列的平均值,对于所有具有零值的列

7

我有一个数据框,其中有多个值为零。 我希望替换为零的值以该列的平均值替换,而不需要重复代码。 我有称为运行时间(runtime),预算(budget)和收入(revenue)的列,它们都有零,我想用该列的平均值替换这些零值。

我尝试过逐列进行如下操作:

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

是否有一种方法可以编写一个函数,以便不必为所有列的每个零值多次编写代码?

3个回答

15

我们可以直接使用replace方法来实现同样的效果,无需使用fillna

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

方法信息: 用"value"替换"to_replace"中的值。

数据框架的值会动态地被替换为其他值。 这与使用.loc或.iloc进行更新不同,后者需要您指定要用某个值更新的位置。


我假定这个程序也会考虑0值,比如说如果一列数有1、0、2,则0将被替换成1而不是1.5? - Maaike

14

这是一个 pandas 数据框,我将使用 mask 将所有的 0 替换成 np.nan,然后使用 fillna

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

1
由于我有多列数据,这个操作会将0值替换为该列的平均值,例如,预算列中的0将仅被替换为该列预算的平均值,而其他列中的0值将被替换为这些列的平均值。 - BobbyGee
很抱歉,这是我第一次在 Stack Overflow 上。 - BobbyGee
1
@BobbyGee 是的,它会 :-) 用它们的含义替换0。 - BENY
谢谢你的帮助。你有什么好的资源推荐给我,让我能够更深入地学习pandas和Python进行数据分析? - BobbyGee
@BobbyGee 你可以搜索Pandas Cookbook,我认为那是一个不错的开始。 :-) - BENY

0

通过迭代所有列并替换它们怎么样?

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

通常情况下,与 Pandas 内置的向量化数组操作相比,迭代速度非常慢。 - BCR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接