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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:01:02