You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:40:28