Pandas 每日到每周 OHLC 数据重采样

问题描述 投票:0回答:1

我使用以下代码将从雅虎财经获取的每日 OHLC 数据重新采样为每周数据:

import pandas as pd
import yfinance as yf

ticker = yf.Ticker('AAPL')
daily_data = ticker.history(start='2024-04-01', end='2024-05-03', interval='1d')

weekly_data = daily_data.resample('W-Sat').agg({
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last',
    'Volume': 'sum'
}).shift(-1).dropna()

代码有效,每周数据与雅虎财经每周数据相匹配,可通过以下方式获取:

ticker = yf.Ticker('AAPL')
yahoo_weekly_data = ticker.history(
    start='2024-04-01', end='2024-05-03', interval='1w')

但是我不明白为什么我必须使用

shift(-1)
才能获得正确的数据。
任何见解将不胜感激。

python python-3.x pandas yfinance
1个回答
0
投票

我认为你不应该

shift
。这会让你丢失一行数据。

如果仔细比较输出(没有

shift
):

weekly_data = daily_data.resample('W-Sat').agg({
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last',
    'Volume': 'sum'
})

                                 Open        High         Low       Close     Volume
Date                                                                                
2024-04-06 00:00:00-04:00  171.190002  171.919998  168.229996  169.580002  239021300
2024-04-13 00:00:00-04:00  169.029999  178.360001  167.110001  176.550003  322249600
2024-04-20 00:00:00-04:00  175.360001  176.630005  164.080002  165.000000  309039200
2024-04-27 00:00:00-04:00  165.520004  171.339996  164.770004  169.300003  241302700
2024-05-04 00:00:00-04:00  173.369995  176.029999  169.110001  173.029999  277367900

ticker = yf.Ticker('AAPL')
yahoo_weekly_data = ticker.history(
    start='2024-04-01', end='2024-05-03', interval='1wk')

                                 Open        High         Low       Close     Volume  Dividends  Stock Splits
Date                                                                                                         
2024-04-01 00:00:00-04:00  171.190002  171.919998  168.229996  169.580002  239021300        0.0           0.0
2024-04-08 00:00:00-04:00  169.029999  178.360001  167.110001  176.550003  322249600        0.0           0.0
2024-04-15 00:00:00-04:00  175.360001  176.630005  164.080002  165.000000  309039200        0.0           0.0
2024-04-22 00:00:00-04:00  165.520004  171.339996  164.770004  169.300003  241302700        0.0           0.0
2024-04-29 00:00:00-04:00  173.369995  176.029999  169.110001  173.029999  277367900        0.0           0.0

值相同,但标签有点不同。

对于

resample
,默认情况下这是右边界,对于 yfinance,这似乎是一周中的星期一。

要获得相同的输出,您可以使用:

weekly_data = daily_data.resample('W-Mon', closed='left', label='left').agg({
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last',
    'Volume': 'sum'
})

                                 Open        High         Low       Close     Volume
Date                                                                                
2024-04-01 00:00:00-04:00  171.190002  171.919998  168.229996  169.580002  239021300
2024-04-08 00:00:00-04:00  169.029999  178.360001  167.110001  176.550003  322249600
2024-04-15 00:00:00-04:00  175.360001  176.630005  164.080002  165.000000  309039200
2024-04-22 00:00:00-04:00  165.520004  171.339996  164.770004  169.300003  241302700
2024-04-29 00:00:00-04:00  173.369995  176.029999  169.110001  173.029999  277367900
© www.soinside.com 2019 - 2024. All rights reserved.