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

如何使用pandas将包含多个表格的单个CSV合并为统一DataFrame

多表格CSV合并的Pandas简洁实现方案

完全可以通过pandas内置方法简化实现,无需复杂的自定义文件读取循环,核心逻辑是先给每行打所属表格的分组标记,再批量处理每个分组即可。

实现思路

  • 按行读取整个CSV为单列DataFrame,自动跳过空行
  • 识别所有marker开头的行,通过累加标记给每一行分配所属表格的分组ID
  • 按分组ID拆分出每个独立表格的内容块
  • 对每个块依次提取信息字段、表头、表数据,新增info1、info2列后存入列表
  • 直接concat所有子表,pandas会自动对齐不同表的列,缺失值填充NaN

代码实现

import pandas as pd

# 1. 按行读取全量数据,自动跳过空行
df_raw = pd.read_csv("test.csv", sep="\n", header=None, skip_blank_lines=True)
# 2. 生成表格分组ID:遇到marker行分组ID+1
df_raw["group_id"] = df_raw[0].str.startswith("marker").cumsum()

sub_dfs = []
for _, group in df_raw.groupby("group_id"):
    # 按多分隔符拆分所有行内容
    rows = group[0].str.split(r";|,|\*", expand=False).tolist()
    # 提取2个信息字段(marker行下第一行的前2个值)
    info1, info2 = rows[1][0].strip(), rows[1][1].strip()
    # 提取列头(marker行下第二行)
    table_cols = [col.strip() for col in rows[2]]
    # 提取表数据(列头行之后的所有内容)
    table_data = rows[3:]
    # 生成子表并添加信息字段
    tmp_df = pd.DataFrame(table_data, columns=table_cols)
    tmp_df["info1"], tmp_df["info2"] = info1, info2
    sub_dfs.append(tmp_df)

# 合并所有子表,自动对齐列
final_df = pd.concat(sub_dfs, ignore_index=True)
# 输出结果
final_df.to_csv("merged_output.csv", index=False)

优化点说明

  • 去掉了手动操作文件指针逐行读取的逻辑,避免指针越界、行数计算错误等问题
  • 无需提前计算每个表格的长度,groupby自动完成表格拆分
  • 代码量相比原版本减少约60%,逻辑清晰易维护,调整规则仅需修改对应行索引即可
  • 自动处理字段前后的空格,避免列名、info字段带多余空格的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:04