Pandas表头错位修复求助:网页提取表格列表头偏移问题
解决Pandas表格表头错位问题
这种表头错位的情况我之前处理过,大概率是原始表格的空格分隔不规范,导致Pandas读取时没能正确识别列边界,把第一行数据和表头混在一起了。先把问题场景再明确下:
原始正确结构的表格:
A A-explained B B-explained C C-explained 1 0.2 10% 2 0.7 20% 3 0.8 15% 1 0.2 10% 2 0.7 20% 3 0.8 15% 1 0.2 10% 2 0.7 20% 3 0.8 15% 1 0.2 10% 2 0.7 20% 3 0.8 15%
提取后出现错位的表格:
A A-explained B B-explained C C-explained NaN NaN NaN 1 0.2 10% 2 0.7 20% 3 0.8 15% 1 0.2 10% 2 0.7 20% 3 0.8 15% 1 0.2 10% 2 0.7 20% 3 0.8 15%
下面给你几个靠谱的解决办法:
方法1:手动指定表头并补全缺失行
如果你已经明确知道表头和列数,可以跳过错误的表头行,手动设置表头后再补回第一行数据:
import pandas as pd # 定义正确的表头 headers = ['A', 'A-explained', 'B', 'B-explained', 'C', 'C-explained'] # 读取数据时跳过第一行(已经错位的表头行),用自定义表头 df = pd.read_csv('your_data_file.txt', sep='\s+', skiprows=1, names=headers) # 把错位的第一行数据补回去 missing_row = pd.DataFrame([[pd.NA, pd.NA, pd.NA, 1, 0.2, '10%']], columns=headers) df = pd.concat([missing_row, df], ignore_index=True)
方法2:预处理数据规范分隔符
原始数据里的空格数量不一致是常见诱因,先把所有多个空格替换成单个,再读取就不会错位了:
import pandas as pd import re # 读取原始文本文件 with open('your_data_file.txt', 'r') as f: lines = f.readlines() # 把每一行里的多个空格替换成单个空格,保证分隔符统一 processed_lines = [re.sub(r'\s+', ' ', line.strip()) + '\n' for line in lines] # 保存处理后的文本 with open('processed_data.txt', 'w') as f: f.writelines(processed_lines) # 读取处理后的文件,此时列分隔符统一,表头就能正确识别了 df = pd.read_csv('processed_data.txt', sep=' ', header=0)
方法3:用固定宽度格式读取(最稳妥)
如果你的表格是固定宽度排版的,直接用read_fwf指定每列的宽度,完全不会出错:
import pandas as pd # 根据你的表格实际列宽调整数值,确保覆盖每一列的内容 col_widths = [3, 12, 5, 12, 3, 10] df = pd.read_fwf('your_data_file.txt', widths=col_widths, header=0)
内容的提问来源于stack exchange,提问作者GDI
相关产品推荐
相关产品推荐

