如何将含缺失值的TSV文件读取为numpy浮点型数组?
解决TSV文件转浮点型NumPy二维数组(含缺失值)的问题
你遇到的问题根源在于使用了names=True参数——这个参数会让np.genfromtxt返回结构化数组(1维,每个元素对应一行数据,包含所有列的字段),而不是你预期的二维浮点数组。下面给你两种通用的解决方案,兼顾缺失值处理:
方案1:直接读取为二维浮点数组(最简便)
如果不需要保留列名,直接跳过表头,指定浮点类型即可,缺失值会被自动转为nan(NumPy处理缺失值的标准方式):
import numpy as np # 跳过第一行列名,按制表符分割,读取为二维浮点数组 data = np.genfromtxt("file.tsv", delimiter="\t", skip_header=1, dtype=np.float64)
如果你的文件里有自定义缺失值标记(比如NA、N/A或者空字符串),可以手动指定并替换:
data = np.genfromtxt( "file.tsv", delimiter="\t", skip_header=1, dtype=np.float64, missing_values=['NA', 'N/A', ''], # 定义哪些字符串算缺失值 filling_values=np.nan # 将缺失值替换为nan )
方案2:保留列名同时转为二维数组
如果需要保留列名信息,先读取结构化数组,再转换为普通二维数组:
import numpy as np # 读取带列名的结构化数组 structured_data = np.genfromtxt("file.tsv", delimiter="\t", names=True, dtype=np.float64) # 将结构化数组转为二维浮点数组 data = structured_data.view(np.float64).reshape(structured_data.shape[0], -1) # 可以通过structured_data.dtype.names获取列名列表 column_names = structured_data.dtype.names
补充说明
你之前写的自定义转换器converter(x)其实没必要——只要指定dtype=np.float64,np.genfromtxt会自动将合法的浮点字符串转为数值,遇到缺失值则转为nan,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Khurram Majeed
相关产品推荐
相关产品推荐

