【发布时间】:2022-06-13 11:18:21
【问题描述】:
无法使用重新采样的数据获得相同的结果。例如:
import yfinance as yf
import pandas as pd
df = yf.download('f', interval = '1mo')
df = df[~df.index.duplicated(keep='last')]
# df = df.resample('CM').mean()
df['pct'] = df['Close'].pct_change()
print(df)
产生这个DataFrame
Open High Low Close Adj Close Volume pct
Date
1972-10-25 NaN NaN NaN NaN NaN NaN NaN
1973-01-23 NaN NaN NaN NaN NaN NaN NaN
1973-07-24 NaN NaN NaN NaN NaN NaN NaN
1973-10-23 NaN NaN NaN NaN NaN NaN NaN
1975-04-24 NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ...
2022-03-01 17.41 18.250 15.51 16.91 16.798235 1.749488e+09 -0.037016
2022-04-01 17.01 17.150 13.90 14.16 14.066411 1.341340e+09 -0.162626
2022-05-01 14.02 15.000 12.07 13.68 13.680000 1.359644e+09 -0.033898
2022-06-01 13.88 13.970 13.36 13.50 13.500000 1.372803e+08 -0.013158
2022-06-03 13.63 13.775 13.36 13.50 13.500000 4.362525e+07 0.000000
我使用'MS' calendar month begin 重新采样了每日数据。这样重采样数据与我们使用 interval = '1mo' 获得的默认数据相匹配
df = yf.download('f')
df = df[~df.index.duplicated(keep='last')]
df = df.resample('MS').mean()
df['pct'] = df['Close'].pct_change()
print(df)
这会产生
Date ...
1972-06-01 2.015902 2.127047 2.098477 ... 0.267396 1.545780e+06 NaN
1972-07-01 2.053871 2.071511 2.039882 ... 0.260849 1.061645e+06 -0.027089
1972-08-01 2.155512 2.171732 2.140879 ... 0.276273 1.683096e+06 0.050896
1972-09-01 2.124429 2.136392 2.110845 ... 0.271796 9.511339e+05 -0.016205
1972-10-01 2.118384 2.128706 2.106587 ... 0.271777 1.152049e+06 -0.002440
... ... ... ... ... ... ...
2022-02-01 18.114211 18.490000 17.770526 ... 18.019060 9.611196e+07 -0.194397
2022-03-01 16.770435 17.036521 16.379565 ... 16.583577 7.606470e+07 -0.079665
2022-04-01 15.530500 15.796500 15.176500 ... 15.341886 6.706698e+07 -0.076340
2022-05-01 13.387619 13.679048 13.084762 ... 13.387619 6.474497e+07 -0.131773
2022-06-01 13.716667 13.903333 13.453333 ... 13.646667 4.576010e+07 0.019350
[601 rows x 7 columns]
在这两个 DataFrame 中比较相同日期时,可以看到数据不匹配。我对最后一列特别感兴趣,即pct_change(),因为它们已经很遥远了。
2022-05-01 14.02 15.000 12.07 13.68 13.680000 1.359644e+09 -0.03389
通过指定interval = '1mo'
2022-05-01 13.387619 13.679048 13.084762 ... 13.387619 6.474497e+07 -0.131773
通过将数据从每日重新采样到每月。
我之前的印象是,与从月初开始的 Yahoo 数据相比,重新采样的数据是在月末采样的。然而,即使在日历月初重新采样,数据也不匹配。您能否告知为什么重新采样的数据与月度数据不匹配?
【问题讨论】: