使用pandas读取内含多个独立CSV结构的单文件报错如何解决
错误原因
- 直接使用
pd.read_csv读取全文件报错是因为文件内包含多个字段数不同的CSV结构,pandas默认按第一个表头的字段数解析后续内容,字段不匹配就会抛出错误。 - 你写的
skiprows=[1,9:]存在语法错误:Python列表中不能直接嵌入切片作为元素,所以无法运行。
解决方法
我们可以先逐行读取文件拆分出5个独立CSV块,再分别解析,具体实现代码如下:
import pandas as pd from io import StringIO # 读取文件全部行,过滤空行 with open("./PA_Logs/summary.csv", "r", encoding="utf-8") as f: all_lines = [line.rstrip("\n") for line in f if line.strip()] # 去除末尾3行无关统计内容 all_lines = all_lines[:-3] # 定位底部4个分段的起始位置 block_markers = ["Read 1", "Read 2 (I)", "Read 3 (I)", "Read 4"] block_start_idx = [idx for idx, line in enumerate(all_lines) if line in block_markers] # -------------------- 读取5个独立数据集 -------------------- # 1. 顶部汇总分段 summary_df = pd.read_csv( StringIO("\n".join(all_lines[:block_start_idx[0]])), skiprows=1 # 跳过第一行的RUN_ID_HERE ) # 2. 底部4个Read分段,存储在字典中,可通过key直接调取 read_dfs = {} for i, marker in enumerate(block_markers): # 确定当前分段的结束位置 end_pos = block_start_idx[i+1] if i < len(block_markers)-1 else len(all_lines) # 跳过分段首行的标记行,剩下内容为标准CSV格式 current_block = all_lines[block_start_idx[i]+1 : end_pos] read_dfs[marker] = pd.read_csv(StringIO("\n".join(current_block)))
结果说明
- 顶部汇总数据集:
summary_df - 底部4个分段数据集:
read_dfs["Read 1"]、read_dfs["Read 2 (I)"]、read_dfs["Read 3 (I)"]、read_dfs["Read 4"]
如果你仅需要读取第一个表格,可直接使用nrows参数限制读取行数,无需处理全文件:
data = pd.read_csv("./PA_Logs/summary.csv", skiprows=1, nrows=5)
内容的提问来源于stack exchange,提问作者kevin41
相关产品推荐
相关产品推荐

