使用Pandas DataFrame向CSV追加行时格式异常的解决求助
解决Pandas追加DataFrame到CSV的格式问题
问题根源
- 索引列乱入:使用
df.to_csv()时默认会把DataFrame的索引写入CSV,导致旧CSV多了一列,下次读取时结构错位。 - 类型不统一:旧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
相关产品推荐
相关产品推荐

