使用np.genfromtxt读取CSV转float时遇字符串转浮点数错误求助
解决np.genfromtxt读取后字符串转float的空值错误
问题根源
你的CSV文件中第6、7、8列存在空字符串(''),直接调用astype(np.float64)无法将空串转换为浮点数,因此触发ValueError。
解决方案
方案1:读取时直接处理空值(推荐,减少重复IO)
利用np.genfromtxt的内置参数,读取时直接将空字符串替换为NaN并转为浮点类型,无需后续转换:
import numpy as np # 一次性读取三列,同时处理空值 phot_g, phot_bp, phot_rp = np.genfromtxt( 'gaia_hyades_search.csv', dtype=np.float64, delimiter=",", skip_header=1, usecols=(6,7,8), unpack=True, missing_values='', filling_values=np.nan )
方案2:针对已读取的字符串数组处理空值
如果已经完成字符串数组的读取,可先将空串替换为NaN再转换类型:
import numpy as np # 原读取代码(保留) phot_g = np.genfromtxt('gaia_hyades_search.csv', dtype='str', delimiter=",", skip_header=1, usecols=(6), unpack=True) phot_bp = np.genfromtxt('gaia_hyades_search.csv', dtype='str', delimiter=",", skip_header=1, usecols=(7), unpack=True) phot_rp = np.genfromtxt('gaia_hyades_search.csv', dtype='str', delimiter=",", skip_header=1, usecols=(8), unpack=True) # 替换空串并转换 def str_to_float(arr): arr[arr == ''] = np.nan return arr.astype(np.float64) phot_g = str_to_float(phot_g) phot_bp = str_to_float(phot_bp) phot_rp = str_to_float(phot_rp)
方案3:用Pandas简化处理(更高效)
Pandas对CSV空值的处理更友好,且无需重复读取文件:
import pandas as pd import numpy as np # 读取指定列 df = pd.read_csv('gaia_hyades_search.csv', usecols=[6,7,8]) # 转换为numpy浮点数组 phot_g = df.iloc[:,0].values.astype(np.float64) phot_bp = df.iloc[:,1].values.astype(np.float64) phot_rp = df.iloc[:,2].values.astype(np.float64)
额外优化提示
你的原代码三次读取同一个CSV文件,会浪费IO资源。无论用哪种方案,都建议一次性读取所需的多列,提升运行效率。
内容的提问来源于stack exchange,提问作者Arvin
相关产品推荐
相关产品推荐

