gpt4 book ai didi

python - pandas:在 DataFrame 中记录单元格时有效避免 0

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:40 27 4
gpt4 key购买 nike

我想在一个非常稀疏的 pandas DataFrame 中获取每个单元格的日志,并且必须避免使用 0。起初我用 lambda 函数检查 0,然后我认为用 NaN 替换许多 0 可能会更快。我从这个 closely related question 得到了一些启发,并尝试使用“面具”。有没有更好的办法?

# first approach
# 7.61 s ± 1.46 s per loop (mean ± std. dev. of 7 runs, 1 loop each)
def get_log_1(df):
return df.applymap(
lambda x: math.log(x) if x != 0 else 0)

# second approach (faster!)
# 5.36 s ± 968 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
def get_log_2(df):
return (df
.replace(0, np.nan)
.applymap(math.log)
.replace(np.nan, 0))

# third apprach (even faster!!)
# 4.76 s ± 941 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
def get_log_3(df):
return (df
.mask(df <= 0)
.applymap(math.log)
.fillna(0))

最佳答案

一种可能的解决方案是使用 numpy.log :

print (np.log(df.mask(df <=0)).fillna(0))

或纯 numpy:

df1= pd.DataFrame(np.ma.log(df.values).filled(0), index=df.index, columns=df.columns)

关于python - pandas:在 DataFrame 中记录单元格时有效避免 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49207688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com