【问题标题】:Is there a function to get log and pct change?是否有获取日志和 pct 更改的功能?
【发布时间】:2021-11-18 22:56:58
【问题描述】:

我想比较一下log和pct change f这两个符号,但是出现如下错误:

KeyError: '调整关闭'

import datetime
import pandas as pd
import numpy as np
import yfinance as yf
start = datetime.datetime(2017, 10, 1)
end = datetime.datetime.now()
symbols = ['BTC-USD', 'ETH-USD']
df = pd.DataFrame()

for i in symbols:
 data = yf.download(i, start=None, end=None,show_errors=("True"),
                period="4y", interval="1mo")
df[i] = data['Adj Close'].pct_change().dropna()


df['log_stuff'] = \
np.log(df['Adj Close'].astype('float64')/df['Adj Close'].astype('float64').shift(1))
df[['pct_change', 'log_stuff','df']].plot();

【问题讨论】:

  • 您能否添加标签pythonfinance,以确保可以找到您的问题?关于您的问题,只需检查 data.columns 并确保您的列名的拼写与数据中的列名匹配。
  • 谢谢。但我无法理解你所说的 data.columns 的意思。请问我需要重写代码。

标签: return percentage finance logarithm


【解决方案1】:

您可以尝试以下方法。请注意,您也可以将列表传递给download(),因此不需要循环。

import numpy as np
import pandas as pd
import yfinance as yf

symbols = ['BTC-USD', 'ETH-USD']
data = yf.download(symbols, period="4y", interval="1mo")

# calculate pct return
pct_data = data['Adj Close'].pct_change()
pct_data = pct_data.add_suffix('_pct')

# calculate log returns
log_data = np.log(data['Adj Close']) - np.log(data['Adj Close'].shift(1))
log_data = log_data.add_suffix('_log')

# combine returns and drop na values
combined_data = pd.concat([pct_data,log_data], axis=1).dropna()

print(combined_data)

这将产生以下输出:

            BTC-USD_pct  ETH-USD_pct  BTC-USD_log  ETH-USD_log
Date
2017-12-01     0.383326     0.692483     0.324490     0.526197
2018-01-01    -0.277987     0.477813    -0.325713     0.390564
2018-02-01     0.017298    -0.235276     0.017150    -0.268240
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多