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

Python如何处理数据集中多余小数点以正常用np.loadtxt加载数据

解决方案

核心是用np.loadtxt自带的converters参数,为异常值所在列自定义转换逻辑,不需要修改原始文件。

可直接运行的修改后代码

import numpy as np

def fix_extra_decimal(val_str):
    # 处理多小数点的异常字符串
    str_val = val_str.strip()
    if str_val.count('.') > 1:
        # 拆分后把前两个分段拼接,保留最后一个小数点
        parts = str_val.split('.')
        fixed_str = parts[0] + parts[1] + '.' + ''.join(parts[2:])
        return float(fixed_str)
    # 正常数值直接转换
    return float(str_val)

# converters参数指定原文件第2列使用自定义函数解析
dataset = np.loadtxt("filename.txt", skiprows=43, usecols=(0,2), converters={2: fix_extra_decimal})

补充说明

  • 原代码里的np.loadtext是笔误,正确方法名为np.loadtxt
  • 转换逻辑只会修改存在多个小数点的异常值,正常数值不受影响
  • 如果需要批量处理大量文件,可以将该转换逻辑封装为通用函数,遍历所有文件调用即可

备选预处理方案(适合超大文件场景)

如果文件体积特别大,逐值转换速度较慢,可以先一次性读取文件内容,全局替换多小数点的异常格式,再通过内存对象加载:

import numpy as np
import io
import re

with open("filename.txt", "r", encoding="utf-8") as f:
    content = f.read()
# 正则匹配多小数点的数值,替换为正确格式
content = re.sub(r'(\d+)\.(\d+)\.(\d+)', r'\1\2.\3', content)
# 从内存加载处理后的数据
dataset = np.loadtxt(io.StringIO(content), skiprows=43, usecols=(0,2))

内容的提问来源于stack exchange,提问作者quantum girl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:36:04