Pandas read_fwf读取.rpt文件时丢失末尾数字的问题求助
解决pandas读取.rpt固定宽度文件时列数据截断问题
问题根源
你在使用pd.read_fwf时错误指定了delimiter=" ",这会干扰固定宽度文件的列宽推断逻辑。另外,read_fwf默认仅通过前若干行推断列宽,若文件中存在更长的数据行,就会出现截断丢失数量级的情况。
解决方案
1. 移除错误参数,优化列宽推断
先去掉delimiter(read_fwf针对固定宽度文件设计,无需指定分隔符),同时增加infer_nrows参数,让pandas用更多行来准确推断列宽:
import pandas as pd # 用更多行推断列宽,数值可根据文件总行数调整 df = pd.read_fwf('myfile.rpt', infer_nrows=500)
2. 手动指定列宽(最可靠)
如果自动推断仍有问题,直接手动定义每列的宽度。先打开.rpt文件,用文本编辑器查看每列的起始和结束位置,比如示例文件中第一列宽度设为20、第二列设为20:
import pandas as pd # 根据实际文件的列宽调整widths列表的数值 df = pd.read_fwf('myfile.rpt', widths=[20, 20])
3. 按多行空格分割(兼容类分隔符格式的.rpt)
如果你的.rpt文件实际是用多个空格作为分隔符(而非严格固定宽度),可以改用正则分割的方式读取:
import pandas as pd import re # 读取文件内容 with open('myfile.rpt', 'r') as f: content = f.read().splitlines() # 分割表头和数据行 header = re.split(r'\s{2,}', content[0].strip()) data_rows = [re.split(r'\s{2,}', line.strip()) for line in content[1:]] # 构建DataFrame并转换为数值类型 df = pd.DataFrame(data_rows, columns=header) df = df.apply(pd.to_numeric, errors='coerce')
验证结果
处理后检查DataFrame的第二列,确认-2.73654E-03这类数据被完整读取为数值(会自动转换为-0.00273654,保留完整数量级)。
内容的提问来源于stack exchange,提问作者hz z
相关产品推荐
相关产品推荐

