读取含多表格的文本文件时遇AttributeError:int对象无iloc属性
读取多表格文本文件时的AttributeError问题
问题原因
你代码里的核心错误是对pd.read_csv返回结果的遍历逻辑搞错了:
- 用
sep='\n\n'调用pd.read_csv时,返回的dfs是一个单列的DataFrame,每一行对应一个空行分隔的表格文本块。 - 但你用
enumerate(dfs)遍历的时候,DataFrame的默认迭代逻辑是遍历列标签,而非行。你的单列DataFrame列标签是0(int类型),所以循环里的df变量其实是这个列标签0,自然会触发'int' object has no attribute 'iloc'的错误。
正确解决方案
不需要转换字符串,而是要先把文件按空行分割成独立的表格文本,再逐个解析为DataFrame:
修正后的代码
import pandas as pd from io import StringIO file_path = '/data/TB/reporting/18RF0375-MI-TBWGS-NextSeq-2019-63_S54_summary.txt' # 读取整个文件,按空行分割成各个表格的文本片段 with open(file_path, 'r') as f: content = f.read() table_fragments = [frag.strip() for frag in content.split('\n\n') if frag.strip()] # 逐个解析每个文本片段为DataFrame dfs = [] for frag in table_fragments: # 用StringIO把文本片段转为可读取的文件对象 df = pd.read_csv(StringIO(frag), sep='\s+', header=0) dfs.append(df) # 验证结果 for df in dfs: print(df.head()) print('---')
代码说明
- 先读取整个文件内容,用
split('\n\n')分割出每个表格的文本块,同时过滤掉空的无效片段。 - 对每个表格文本,用
StringIO包装后传给pd.read_csv,用sep='\s+'处理空格分隔的表格(如果你的表格是制表符分隔,可换成sep='\t')。 - 最终得到的
dfs是每个独立表格对应的DataFrame列表,可直接遍历使用。
补充说明
如果你的表格表头和内容的分隔规则有特殊情况,可根据实际文本调整pd.read_csv的参数,比如指定header位置、skiprows等,确保表头和数据被正确识别。
内容的提问来源于stack exchange,提问作者natural_d
相关产品推荐
相关产品推荐

