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

Pandas合并不同形状DataFrame:添加自定义首行并消除多余空值

解决方案:在Pandas DataFrame前添加自定义首行并消除多余空值

问题说明

需要在Pandas DataFrame(df1)前添加一行自定义内容(格式为HEADER|日期|前一日日期),忽略原DataFrame表头,但使用concat合并后导出CSV时,首行末尾出现多余空值,不符合预期格式:

  • df1结构:
    A    B    C   D   E   F      G      H
    0  ABC1234  123  abc  45  64  34  Aruna  67044
    1  DEF2344  345  red  34  43  56  Jason  83234
    
  • 自定义首行:'HEADER|'+ str(ODATE) + '|' + str(ODATE-datetime.timedelta(days=1))
  • 当前导出结果(首行多余空值):

    HEADER|20221008|20221007||||||||
    ABC1234|123|abc|45|64|34|Aruna|67044
    DEF2344|345|red|34|43|56|Jason|83234

  • 期望导出结果:

    HEADER|20221008|20221007
    ABC1234|123|abc|45|64|34|Aruna|67044
    DEF2344|345|red|34|43|56|Jason|83234

问题原因

原代码将自定义首行字符串转为Series后与df1拼接,由于Series仅1个元素,而df1有8列,拼接后首行其余列自动填充NaN,导出CSV时这些NaN被转为空值,导致首行末尾出现多余的||||||||。

解决方法

直接通过文件操作分两步写入:先写入自定义首行,再追加df1的内容,无需使用concat。

修正后代码

import pandas as pd
from datetime import datetime, timedelta

# 示例日期定义
ODATE = datetime(2022, 10, 8)
final_output_file = "output.csv"

# 生成格式化后的自定义首行
header_line = f'HEADER|{ODATE.strftime("%Y%m%d")}|{(ODATE - timedelta(days=1)).strftime("%Y%m%d")}'

# 第一步:写入首行到文件
with open(final_output_file, 'w', encoding='utf-8') as f:
    f.write(header_line + '\n')

# 第二步:追加df1内容,忽略原表头和索引
df1.to_csv(final_output_file, mode='a', index=False, sep='|', header=False)

代码说明

  1. 用strftime格式化日期,确保输出为YYYYMMDD格式,避免datetime对象直接转字符串带来的多余字符
  2. 先以写入模式打开文件,写入自定义首行并换行
  3. 用mode='a'以追加模式写入df1,同时指定header=False忽略原表头,index=False不写入索引

这种方法避开了Pandas拼接时的列数匹配问题,直接生成符合要求的CSV格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:46:47