You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:13:28