【问题标题】:AttributeError: 'SingleBlockManager' object has no attribute 'log'AttributeError:“SingleBlockManager”对象没有属性“日志”
【发布时间】:2022-01-24 11:05:36
【问题描述】:

我正在使用具有百万行和 1000 列的大数据。我已经提到了这篇文章here。不要将其标记为重复。

如果需要样本数据,您可以使用下面的

from numpy import *

m = pd.DataFrame(array([[1,0],
           [2,3]]))

我有一些连续变量,其中包含 0 值。

我想计算所有这些连续变量的logarithmic transformation

但是,我遇到了divide by zero error。所以,我根据上面的链接帖子尝试了以下建议

df['salary'] = np.log(df['salary'], where=0<df['salary'], out=np.nan*df['salary']) #not working `python stopped working` problem`

from numpy import ma
ma.log(df['app_reg_diff'])  # error

我的问题如下

a) 申请1000列时如何避免divide by zero error?如何对所有连续列执行此操作?

b) 如何从对数转换中排除零并获取其余非零观测值的对数值?

【问题讨论】:

    标签: python pandas dataframe numpy numpy-ufunc


    【解决方案1】:

    您可以将零值替换为您喜欢的值并正常进行对数运算。

    import numpy as np
    import pandas as pd
    
    m = pd.DataFrame(np.array([[1,0], [2,3]]))
    
    m[m == 0] = 1
    
    print(np.log(m))
    

    在这里你会得到零个项目的零。例如,您可以将其替换为 -1 以获取 NaN

    【讨论】:

    • 谢谢,支持,会尝试更新你
    • 但我们只需要像您所做的那样将zero 替换为1。我对吗?只有这样,当我们记录日志时,它才会为零。如果我用其他值替换零,它可能会生成一个日志值(对于那个替换值)。我说的对吗?
    • 另外,我可以检查如何将其应用于具有 1000 列的百万行数据框吗?
    • @TheGreat 您可以将其替换为任何值。该值取决于您将如何处理输出。例如,将其设置为 -1 是有意义的,因为它给出了 NaN 并且 0 的对数未定义。关于将其应用于大数据,替换零值不需要新的内存分配。也许我在示例中这样做的方式会分配新的内存。如果是这样,也许可以找到一种方法来消除m == 0 的分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2012-12-01
    • 2021-04-19
    • 2023-03-31
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多