Pandas读取数据时如何为表头与数据设置不同分隔符?
解决Pandas读取表头含单个空格的多空格分隔数据问题
针对你遇到的表头含单个空格(如222 U)、数据行用多/单个空格分隔的矛盾场景,无法用单一分隔符同时正确解析表头和数据的问题,可通过分开处理表头与数据行的方式解决:
步骤1:单独提取并处理表头
先从文件中读取表头行,用**至少2个空格(\s{2,})**分割,保留含单个空格的字段名:
import re import pandas as pd filename = "your_data_file.txt" # 替换为你的文件路径 rows_to_keep = [0, 2, 3, 5] # 示例:你需要保留的行索引(含表头行) # 读取文件所有行,定位表头行 with open(filename, encoding='latin1') as f: all_lines = f.readlines() # 假设rows_to_keep中第一个是表头行,根据实际情况调整 header_row_idx = rows_to_keep[0] header_content = all_lines[header_row_idx].strip() # 用至少2个空格分割表头,得到正确的列名列表 column_names = re.split(r'\s{2,}', header_content)
步骤2:读取数据行并匹配列名
读取数据行时用**任意数量空格(\s+)**分割,跳过表头行,最后将处理好的列名赋值给DataFrame:
# 读取数据行:跳过非目标行 + 跳过表头行 df = pd.read_csv( filename, encoding='latin1', sep='\s+', skip_blank_lines=True, skiprows=lambda x: x not in rows_to_keep or x == header_row_idx, header=None # 不自动识别表头 ) # 为DataFrame设置正确的列名 df.columns = column_names
补充说明
- 需确保
rows_to_keep中包含表头行的索引,且处理后的column_names长度与数据行的列数一致; - 如果表头行不在
rows_to_keep的首位,需自行调整header_row_idx的取值逻辑; - 此方法避免了单一分隔符的局限性,同时兼容表头含单个空格、数据行多空格分隔的场景。
内容的提问来源于stack exchange,提问作者donpicoro
相关产品推荐
相关产品推荐

