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

获取股票Open/High等数据时Pandas DataFrame为空的问题排查

问题排查与修复方案

问题根源

你遇到的空DataFrame问题,核心出在dropna()的默认行为上:

  • 调用.dropna()时未指定how参数,默认会删除任何包含NaN值的行。
  • Open/High/Low数据中,部分标的可能在某些日期存在缺失值(比如停牌、数据延迟更新),导致每一行都至少有一个NaN,执行dropna()后所有行被清空。
  • 而Close数据恰好所有标的在统计周期内无缺失值,所以dropna()后能正常保留数据。

修复步骤

1. 调整dropna()参数(核心修复)

将所有.dropna()调用改为只删除整行全为NaN的行,保留含有效数据的行:

def get_open_data(data):
    if os.path.exists('open.csv'):
        # 修改dropna参数为how='all'
        dataframe = pd.read_csv('open.csv', index_col="Date", parse_dates=True).dropna(how='all')
    else:
        data = yf.download(tickers=data, period='1y', interval='1d')['Open']
        data.to_csv('open.csv')
        # 同步修改下载分支的dropna参数
        complete_data = data.dropna(how='all')
        dataframe = pd.DataFrame(complete_data)
    return dataframe

# get_close_data函数也建议同步修改,避免后续出现类似问题
def get_close_data(data):
    if os.path.exists('close.csv'):
        dataframe = pd.read_csv('close.csv', index_col="Date", parse_dates=True).dropna(how='all')
    else:
        data = yf.download(tickers=data, period='1y', interval='1d')['Close']
        data.to_csv('close.csv')
        complete_data = data.dropna(how='all')
        dataframe = pd.DataFrame(complete_data)
    return dataframe

2. 可选:填充缺失值(替代删除)

如果不想删除任何行,可以用填充法处理缺失值,比如前向填充(用前一天的数据填充):

# 读取时替换dropna为fillna
dataframe = pd.read_csv('open.csv', index_col="Date", parse_dates=True).fillna(method='ffill')

3. 验证数据状态(排查辅助)

可以在下载数据后打印缺失值统计,确认问题:

data = yf.download(tickers=data, period='1y', interval='1d')['Open']
# 查看数据基本信息
print(data.info())
# 统计每列(每个标的)的缺失值数量
print(data.isna().sum())

内容的提问来源于stack exchange,提问作者custardbun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:23:27