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

1分钟股票数据重采样为1小时后,DataFrame未包含所有CSV文件的问题求助

问题排查与解决

核心原因:未按合约分组重采样

你当前的代码将所有合约数据合并后直接全局重采样,会导致同一时间窗口内的多合约数据被强行聚合在一起。由于聚合规则里合约代码取first,每个小时段只会保留第一个出现的合约(比如a2309),其他合约的该时段数据被覆盖,最终结果自然看不到后续合约。

分步排查与修复

1. 确认数据是否完整读取与合并

在合并DataFrame后,先执行以下代码验证所有合约是否已加载:

# 打印所有已加载的唯一合约代码
print(df['合约代码'].unique())
# 统计每个合约的数据行数
print(df.groupby('合约代码').size())

如果输出里没有zn2407等合约,说明读取或合并环节出了问题:

  • 先执行print(all_files),确认文件列表是否包含目标合约的CSV文件,检查路径拼接是否正确(比如Windows路径斜杠、文件名大小写)
  • 修改文件读取逻辑,添加异常捕获定位问题文件:
li = []
for filename in all_files:
    try:
        df_temp = pd.read_csv(filename, index_col=None, header=0, encoding='gbk')
        li.append(df_temp)
        print(f"成功读取:{filename}")
    except Exception as e:
        print(f"读取失败 {filename}:{str(e)}")
df = pd.concat(li, axis=0, ignore_index=True)

2. 按合约分组后重采样(核心修复)

正确的做法是对每个合约单独执行重采样,避免跨合约数据覆盖。修改重采样部分的代码:

df['时间'] = pd.to_datetime(df['时间'])
# 按合约代码分组,每组独立执行小时重采样
df_resampled_1hr = df.groupby('合约代码').resample('H', on='时间').agg(aggregation_rules).reset_index()
print(df_resampled_1hr)

这样每个合约都会生成独立的小时级数据,不会互相覆盖。

3. 额外检查:时间范围匹配性

如果zn2407等合约的时间不在2023年(你的数据路径是fut_data_1min_2023),可检查时间列的范围:

print(df['时间'].min(), df['时间'].max())

确认是否包含目标合约的有效时间区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:05:16