这是一个示例数据,即使没有负数或 np.nan,它仍然显示错误消息:
数据:
gvkey sale ebit
4 1000 44.8 16.8
5 1000 53.2 11.5
6 1000 42.9 6.2
7 1000 42.4 0.9
8 1000 44.2 5.3
9 1000 51.9 9.7
功能:
def calculate_ln_values(df):
conditions_ebit = [
df['ebit'] >= 0.0,
df['ebit'] < 0.0
]
choices_ebit = [
np.log(1 + df['ebit']),
np.log(1 - df['ebit']) * -1
]
df['lnebit'] = np.select(conditions_ebit, choices_ebit, default=np.nan)
conditions_sale = [
df['sale'] >= 0.0,
df['sale'] < 0.0
]
choices_sale = [
np.log(1 + df['sale']),
np.log(1 - df['sale']) * -1
]
df['lnsale'] = np.select(conditions_sale, choices_sale, default=np.nan)
return df
跑步
calculate_ln_values(data)
错误警告:
C:\Users\quoc\anaconda3\envs\uhart\Lib\site-packages\pandas\core\arraylike.py:399: RuntimeWarning: invalid value encountered in log
result = getattr(ufunc, method)(*inputs, **kwargs)
C:\Users\quoc\anaconda3\envs\uhart\Lib\site-packages\pandas\core\arraylike.py:399: RuntimeWarning: invalid value encountered in log
result = getattr(ufunc, method)(*inputs, **kwargs)
如果有人能帮助我解决这个问题我将非常感激
---- 编辑:回复@Emi OB 和@Quang Hoang 的回答:-----------
论文中的公式是:
如果 EBIT ≥ 0,则 ln(1+EBIT)
如果 EBIT < 0,则为 -ln(1-EBIT)
所以我的代码:
np.log(1 + df['ebit']),
np.log(1 - df['ebit']) * -1
请参阅本文。
np.log(1 - df['ebit'])
由于属于 的条件,因此该部分不可能为负ebit < 0
。