使用np.genfromtxt处理含#-INF缺失值及逗号小数点的数据集问题
问题根因
- 核心问题是
delimiter参数设置错误:你指定的固定宽度总共有9个取值,意味着只会读取9列数据,#-INF及之后的所有列都被直接截断舍弃,和missing_values参数无关。 - 次要问题是
missing_values映射错误:你仅给第0列(日期列)设置了#-INF为缺失值,实际#-INF出现在靠后的数值列,匹配规则完全不生效。 - 额外问题:固定宽度适配性极差,只要原始数据的列宽有一点变动就会读错,远不如自动识别空白分隔的方案稳定。
修正后的实现代码
推荐用自动识别空白分隔的方案,不需要手动数列宽,适配性更强:
import numpy as np # 第一步:全量读取所有列为字符串格式,自动按任意空白拆分列 raw_data = np.genfromtxt(r'data.txt', skip_header=2, delimiter=None, dtype=str) # 第二步:统一处理字符串格式问题 # 替换逗号为标准小数点 raw_data = np.char.replace(raw_data, ',', '.') # 替换#-INF为nan字符串,后续转数值时会自动识别为np.nan raw_data = np.char.replace(raw_data, '#-INF', 'nan') # 第三步:拆分数据类型,前两列是日期、时间保留为字符串,后续列转浮点型 datetime_col = raw_data[:, :2] value_col = raw_data[:, 2:].astype(np.float32) # 合并为最终可用的数据集 processed_data = np.column_stack([datetime_col, value_col])
效果说明
处理后的数据包含完整的16列内容,所有#-INF会被转换为numpy标准缺失值np.nan,逗号小数点也完成转换,可直接传入matplotlib进行绘图。
内容的提问来源于stack exchange,提问作者cobra
相关产品推荐
相关产品推荐

