如何解决yfinance中美股与英股因时区差异导致DataFrame分行问题
解决美股与英股收盘价分行问题
问题根源在于美股(ET时区)和英股(GMT/BST时区)的收盘时间不同,反映到UTC时间戳上存在差异,导致yfinance将同一自然日的两类股票收盘价拆分为不同行。以下是两种简单的解决方法:
方法一:使用Resample按日聚合
通过将数据重采样为日频,保留每个交易日各股票的最后收盘价(即当日收盘值),自动对齐到同一日期索引:
import yfinance as yf period = '1y' tickers = ['SPY', 'QQQ', 'IUSA.L', 'VUKE.L'] df = yf.download(tickers, period=period, progress=False)['Close'] # 按日重采样,取每个股票当日最后可用值 df_aligned = df.resample('D').last() # 删除所有股票均无数据的非交易日 df_aligned = df_aligned.dropna(how='all') print(df_aligned.tail(10))
方法二:按日期分组聚合
先将时间戳截断为纯日期,再按日期分组并保留每个股票的非空值:
import yfinance as yf period = '1y' tickers = ['SPY', 'QQQ', 'IUSA.L', 'VUKE.L'] df = yf.download(tickers, period=period, progress=False)['Close'] # 将索引截断为纯日期(时间部分设为午夜) df.index = df.index.floor('D') # 按日期分组,保留每个股票的首个非空值(当日唯一收盘价) df_aligned = df.groupby(df.index).first() # 删除全空行 df_aligned = df_aligned.dropna(how='all') print(df_aligned.tail(10))
两种方法都会将同一自然日的美股与英股收盘价合并到同一行,同时保留不同市场休市日的NaN值(符合实际交易情况)。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

