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

如何用Pandas从同一文件读取两个独立CSV为不同DataFrame

纯Pandas实现拆分含多区块的CSV文件

问题场景

我有一个CSV文件,里面包含两个独立的CSV数据区块,以特定标题行分隔:

  • Polymerase Stats部分占1-8行
  • CCS Stats部分行数不超过50行

目前我通过枚举文件行查找CCS Stats的行号来拆分读取,方法可行,但希望完全用Pandas实现操作。

简化CSV示例

RUNID: TEST_RUN
Polymerase Stats:
Cell,Project,Name,Bases,Reads
A01,Proj1,Cell_1,17438371,2836501
B01,Proj1,Cell_2,19327981,3789533
C01,Proj2,Cell_3,14935525,1897239
CCS Stats:
Cell,Project,Name,CCS_Bases,CCS_Reads,MedQ
A01,Proj1,Sample_1,5473982,123678,31
B01,Proj1,Sample_2,5834094,738491,32
B01,Proj1,Sample_3,5834094,738491,31
C01,Proj2,Sample_4,4378978,453216,31

现有解决方案(依赖文件枚举)

with open("run_stats.csv") as f:
    for num, line in enumerate(f, 1):
        if "CCS Stats" in line:
            csv_split=num
df_runstats_poly = pd.read_csv("run_stats.csv", skiprows=2, nrows=csv_split-3)
df_runstats_ccs = pd.read_csv("run_stats.csv", skiprows=csv_split)

纯Pandas实现方案

核心思路是先用Pandas读取整个文件的所有行,定位到分隔行的位置,再分别读取两个数据区块:

import pandas as pd

# 读取整个文件为无表头的Series,每一行对应一个元素
all_lines = pd.read_csv("run_stats.csv", header=None, squeeze=True)

# 找到包含"CCS Stats:"的行的索引(Pandas索引从0开始)
split_idx = all_lines[all_lines.str.contains("CCS Stats:")].index[0]

# 读取Polymerase Stats区块:跳过前2行,读取到split_idx-1行
df_poly = pd.read_csv("run_stats.csv", skiprows=2, nrows=split_idx - 2)

# 读取CCS Stats区块:跳过split_idx行,直接读取数据
df_ccs = pd.read_csv("run_stats.csv", skiprows=split_idx + 1)

代码说明

  1. 读取所有行:通过header=None和squeeze=True将整个文件转为一维Series,方便快速定位分隔行。
  2. 定位分隔行:利用str.contains筛选目标标题行,获取其0基索引值。
  3. 拆分读取区块:
    • Polymerase Stats区块:跳过前2行(RUNID和区块标题行),读取行数为split_idx - 2,对应从数据表头行到CCS标题行的前一行。
    • CCS Stats区块:跳过split_idx + 1行,直接从该区块的数据表头行开始读取。

这种方法全程使用Pandas API完成,无需手动操作文件句柄枚举行,更贴合Pandas的使用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:51