Pandas读取CSV遇表头起始行不固定报错,如何自动定位表头?
解决Pandas自动识别CSV表头起始行的问题
核心思路是先逐行扫描CSV文件,找到第一个包含13个字段的行(也就是表头行),再用这个行号确定需要跳过的行数,最后读取文件。
步骤1:编写函数定位表头行
这个函数会遍历文件每一行,统计每行的字段数量,返回第一个字段数等于13的行号(从0开始计数):
import pandas as pd import csv def find_header_row(file_path, target_cols=13, delimiter=','): with open(file_path, 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter=delimiter) for row_num, row in enumerate(reader): # 过滤空行避免干扰 if not row: continue if len(row) == target_cols: return row_num return None # 未找到符合条件的行时返回None
步骤2:修改批量读取逻辑
调用上面的函数获取表头行号,再用skiprows跳过前面的行,指定找到的行作为表头:
def create_formatted(csv_files): for f in csv_files: header_row_idx = find_header_row(f) if header_row_idx is None: print(f"⚠️ 文件{f}未找到包含13个字段的表头行,跳过读取") continue # skiprows跳过表头行之前的所有行,header=0表示将找到的行作为表头 df = pd.read_csv(f, skiprows=header_row_idx, header=0, encoding='utf-8') # 这里可以添加你的后续处理逻辑,比如数据清洗、保存等 print(f"✅ 成功读取文件{f},表头位于第{header_row_idx + 1}行(从1开始计数)")
注意事项
- 如果你的CSV文件用的是其他分隔符(比如制表符
\t),要在find_header_row和pd.read_csv里指定delimiter='\t' - 若文件编码不是
utf-8,可以换成gbk等对应编码 - 若文件存在大量空行,可根据实际情况调整空行过滤逻辑
内容的提问来源于stack exchange,提问作者Matthew Clifford
相关产品推荐
相关产品推荐

