获取数据集日志的另一个解决方案是什么



我正在尝试获取数据的日志以创建模型,但有些行中存在零值,因此log(0(的输出为-inf,这导致了一个问题。

是否有删除所有零值的更好解决方案

我的数据集是:

ds    y
0   2020-01-22  0
1   2020-01-23  0
2   2020-01-24  0
3   2020-01-25  0
4   2020-01-26  0
... ... ...
353 2021-01-09  148799
354 2021-01-10  149792
355 2021-01-11  150753
356 2021-01-12  151723
357 2021-01-13  152719

您可以使用列表理解:

import pandas as pd 
import numpy as np
a = pd.DataFrame({'y':[0,7,67656,15,0,2]})
print(a)
a["log"] = np.log10(a["y"])
a["log"] = [x[1] if x[0]!=0 else 0 for x in a.to_numpy()]

或者更简单:

import math
a["log"] = [math.log10(x) if x!=0 else 0 for x in a["y"]]

把你需要的东西放在其他东西之后。

这是解决问题的简单方法,可能有更复杂的方法。

你可以简单地取log(x+a)而不是log(x),其中a是一个选定的常数(或者你可以用ML行话说的超参数(,a的值可能是一个非常小的数字(例如0.00001(,这取决于你的目标和容差。所以现在你可以计算log(0+0.00001)而不是log(0),它会给出一个值-5而不是爆炸。

正如我所说,可能有一种更聪明的方法,比如彻底理解数据,为什么0首先存在,它们代表什么,等等

(注意:它(a的值(不应该是很低/很小的数字,因为所有软件包/软件都有一个四舍五入级别,所以它可能会四舍五进并将您的a变为零。(

您可能希望将numpy.log与"其中";参数:

df['y'] =  np.log(df['y'], where = df['y'] != 0)

您也可以通过以下方式进行:

mask = df['y'] != 0
valid = df.loc[mask,'y']
df['y'] = 0
df.loc[mask, 'y'] = np.log(valid)

相关内容

  • 没有找到相关文章

最新更新