Aqui está um exemplo de dados, mesmo que não haja nenhum negativo ou np.nan, ele ainda mostra uma mensagem de erro:
Dados:
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
Função:
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
Correr
calculate_ln_values(data)
Aviso de erro:
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)
Eu ficaria muito grato se alguém pudesse me ajudar com essa questão
---- Editar: resposta à resposta de @Emi OB e @Quang Hoang: ---------------
A fórmula como no artigo é:
ln(1+EBIT) se EBIT ≥ 0
-ln(1-EBIT) se EBIT < 0
então meu código:
np.log(1 + df['ebit']),
np.log(1 - df['ebit']) * -1
segue o artigo.
A parte np.log(1 - df['ebit'])
é impossível de ser negativa, pois se enquadra na condição de ebit < 0
.