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

使用Pandas DataFrame向CSV追加行时格式异常的解决求助

解决Pandas追加DataFrame到CSV的格式问题

问题根源

  1. 索引列乱入:使用df.to_csv()时默认会把DataFrame的索引写入CSV,导致旧CSV多了一列,下次读取时结构错位。
  2. 类型不统一:旧CSV的datetime列是字符串格式,新数据的datetime可能是Timestamp类型,合并后排序时出现类型冲突报错。

修正方案

直接对代码做两处关键调整:

  • 读取已有CSV时,用parse_dates=['datetime']把datetime列解析为Timestamp类型,确保和新数据类型统一
  • 所有写入CSV的操作都加index=False,禁止写入索引列

修改后的完整代码

path = f"{filename}.csv"  # f-string直接生成路径字符串,无需额外转str
csv = Path(path)

if csv.exists():
    # 读取时自动解析datetime列为Timestamp,避免类型冲突
    df = pd.read_csv(path, parse_dates=['datetime'])
    df = pd.concat([df, df1])
    df = df.drop_duplicates()
    # 此时datetime均为Timestamp类型,排序不会报错
    df = df.sort_values(by=['datetime'], ascending=True)
    # 写入时不保存索引,严格匹配原始CSV格式
    df.to_csv(path, index=False)
else:
    df1 = df1.sort_values(by=['datetime'], ascending=True)
    # 首次写入同样禁用索引
    df1.to_csv(path, index=False)

额外优化提示

  • 如果新数据df1的datetime列仍是字符串,建议合并前统一转成Timestamp:df1['datetime'] = pd.to_datetime(df1['datetime']),彻底杜绝类型问题
  • 去重逻辑可按需指定子集,比如按datetime和symbol组合去重:df.drop_duplicates(subset=['datetime', 'symbol'], keep='last')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:37:36