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

Pandas合并股票CSV文件时hd值错位、匹配失败如何解决

问题原因分析

你遇到的三个问题核心原因如下:

  • 合并错位、匹配失败:你使用字符串格式的日期作为匹配键,两个表的日期字符串可能存在格式歧义(比如日月顺序识别错误、前导零不一致等),导致大量匹配失败被填充为0。
  • 可视化日期顺序混乱:Date/Time列存储为字符串类型,可视化工具会按字典序而非时间顺序排序,出现日期倒序、乱序问题。
  • hd列位置不符合要求:默认合并后hd列会放在最后,需要手动调整列顺序。

修正后代码

import pandas as pd

# 1. 读取数据时统一解析日期为datetime类型,明确指定格式为日/月/年,避免歧义
data1 = pd.read_csv('ohlcv286.csv', parse_dates=['Date/Time'], date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y'))
data2 = pd.read_csv('hd286.csv', parse_dates=['Date/Time'], date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y'))

# 2. 左连接合并,用datetime类型的Ticker和Date/Time作为匹配键
merge_df = data1.merge(data2, on=['Ticker', 'Date/Time'], how='left').fillna(0)

# 3. 调整列顺序,将hd列放到Volume后面
col_order = ['Ticker', 'Date/Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'hd']
merge_df = merge_df[col_order]

# 4. 导出前可将日期转为YYYY-MM-DD格式,避免后续工具识别错误,也可保留datetime格式按需选择
merge_df['Date/Time'] = merge_df['Date/Time'].dt.strftime('%Y-%m-%d')

# 5. 导出结果
merge_df.to_csv('exp.csv', index=False)

代码修改说明

  • 读取数据时明确指定日期格式为%d/%m/%Y,彻底避免pandas自动识别时把月、日顺序搞反的问题,同时用datetime类型做匹配键,匹配准确率远高于字符串。
  • 手动指定列顺序,确保hd列固定在Volume列之后。
  • 导出时将日期转为YYYY-MM-DD的通用格式,所有可视化工具读取后都会按正确的时间顺序排序,不会再出现乱序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:03