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

Python如何按重复公共表头将大型CSV文件拆分为多个DataFrame

重复表头CSV拆分多DataFrame实现方案

以下两种实现均基于Python + Pandas,可自动匹配任意次数的重复表头,适配不同大小的文件场景。

方案1:先定位表头位置分块读取(低内存占用,适合GB级大文件)

核心逻辑是先逐行扫描文件定位所有表头的行号,再按表头位置分批次读取数据,全程不会一次性加载整个文件到内存。

import pandas as pd

# 可根据实际文件修改以下配置参数
csv_path = "你的文件路径.csv"
header_content = "Order\tTime\tValue"  # 替换为你实际的表头完整内容,匹配分隔符
delimiter = "\t"  # CSV分隔符,逗号分隔就改为","

# 第一步:扫描文件获取所有表头的行索引
header_indexes = []
with open(csv_path, "r", encoding="utf-8") as f:
    for line_idx, line_content in enumerate(f):
        if line_content.strip() == header_content.strip():
            header_indexes.append(line_idx)

# 第二步:按表头位置分块读取为DataFrame,结果存入列表
df_list = []
for block_idx in range(len(header_indexes)):
    start_line = header_indexes[block_idx]
    # 最后一个块读取到文件末尾,其余块读取到下一个表头的前一行
    if block_idx == len(header_indexes) - 1:
        read_rows = None
    else:
        read_rows = header_indexes[block_idx + 1] - start_line - 1
    # 读取当前块
    current_df = pd.read_csv(
        csv_path,
        sep=delimiter,
        skiprows=start_line,
        nrows=read_rows
    )
    df_list.append(current_df)

# 需要单独调用df1、df2时直接按索引取即可
df1 = df_list[0]
df2 = df_list[1]

方案2:全量读取后拆分(代码简洁,适合中小文件)

核心逻辑是一次性读取所有行,遇到表头就切割生成新的DataFrame,代码更易维护。

import pandas as pd
from io import StringIO

# 可根据实际文件修改以下配置参数
csv_path = "你的文件路径.csv"
header_content = "Order\tTime\tValue"
delimiter = "\t"

with open(csv_path, "r", encoding="utf-8") as f:
    all_lines = f.readlines()

df_list = []
current_block = []
for line in all_lines:
    # 匹配到新表头时处理上一个块
    if line.strip() == header_content.strip():
        if current_block:
            current_df = pd.read_csv(StringIO("".join(current_block)), sep=delimiter)
            df_list.append(current_df)
            current_block = []
    current_block.append(line)
# 处理最后一个数据块
if current_block:
    df_list.append(pd.read_csv(StringIO("".join(current_block)), sep=delimiter))

鲁棒性优化

如果表头存在多余空格、大小写差异等情况,可将表头匹配逻辑替换为关键词匹配,避免识别失败:

# 替换原有的表头判断代码即可
if all(keyword in line for keyword in ["Order", "Time", "Value"]):

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:24:02