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

如何用Pandas从含分隔标记的单个CSV读取多个DataFrame?

用Pandas分割带分隔标记的CSV为多个DataFrame

问题背景

你有如下结构的CSV文件:

col A, col B
1, 5
2,7
78,65
###########
5,8
15,23
###########
17, 15
25,62
12,15
95,56

需要将其转换为一组DataFrame,每个DataFrame对应###########分隔标记之间的区域,希望用Pandas实现(而非file.readlines()的方式),预期结果如下:

df1 = {'col A': {1,2,78}, 'col B': {5,7,65}}
df2 = {'col A': {5,15}, 'col B': {8,23}}
df3 = {'col A': {17,25,12,95}, 'col B': {15,62,15,56}}

Pandas实现方案

步骤说明

  1. 读取整个CSV文件,保留所有行(包括分隔符行),不预先设置表头;
  2. 定位所有分隔符所在的行,以此为边界划分数据组;
  3. 对每个数据组,设置表头、清理数据格式,转换为独立的DataFrame。

代码实现

import pandas as pd

# 读取文件,不设置表头,保留所有行
full_data = pd.read_csv('your_file.csv', header=None, skip_blank_lines=False)

# 定义分隔符字符串
separator = '###########'

# 找出所有包含分隔符的行索引
sep_rows = full_data[full_data[0].str.contains(separator, na=False)].index.tolist()

# 构造分组的边界(包含文件开头和结尾)
group_bounds = [-1] + sep_rows + [len(full_data)]

# 存储结果DataFrame的列表
result_dfs = []

# 获取表头(第一行数据)
header = full_data.iloc[0].str.strip().tolist()

for idx in range(len(group_bounds) - 1):
    # 计算当前组的起始和结束行
    start_row = group_bounds[idx] + 1
    end_row = group_bounds[idx + 1]
    group = full_data.iloc[start_row:end_row]
    
    # 跳过空组或重复的表头行(第一个组的起始行是0时跳过表头行)
    if len(group) == 0 or (idx == 0 and start_row == 0):
        continue
    
    # 处理数据:设置表头、去除空格、转换为数值类型、重置索引
    group.columns = header
    cleaned_group = group.apply(lambda col: col.str.strip()) \
                         .dropna() \
                         .astype(int) \
                         .reset_index(drop=True)
    result_dfs.append(cleaned_group)

# 提取结果
df1, df2, df3 = result_dfs

# 验证输出
print("df1:\n", df1)
print("\ndf2:\n", df2)
print("\ndf3:\n", df3)

代码解释

  • pd.read_csv(..., header=None):避免将第一行直接设为表头,保留所有原始行数据;
  • full_data[0].str.contains(separator):定位所有分隔符所在的行,为分组提供边界;
  • 循环处理每个分组时,通过apply(lambda col: col.str.strip())清理单元格的空格,astype(int)将数据转换为数值类型,确保DataFrame的格式符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:30:35