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
相关产品推荐
相关产品推荐

