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

PyTorch转换numpy.object_数组报错:无法转为张量问题求助

解决PyTorch转换DataFrame为张量时的numpy.object_类型错误

问题根源

虽然你确认CSV里都是数字,但Pandas读取时可能因为隐藏空值、字符串格式的数字(比如带空格/引号)、部分行格式异常,将列类型识别为object,而PyTorch不支持直接把object类型的numpy数组转为张量。

解决方案

1. 强制转换列类型并处理异常值

先把目标列转为数值类型,同时处理无法转换的内容:

# 遍历输入列,强制转为数值类型,无法转换的设为NaN
for col in inputs:
    df[col] = pd.to_numeric(df[col], errors='coerce')
# 遍历输出列做同样处理
for col in outputs:
    df[col] = pd.to_numeric(df[col], errors='coerce')

# 删除包含NaN的行(也可以用均值/中位数填充,根据需求选择)
df = df.dropna(subset=inputs + outputs)

# 再转张量
x = torch.tensor(df[inputs].values, dtype=torch.float, device=device)
y = torch.tensor(df[outputs].values, dtype=torch.float, device=device)

2. 排查异常行

如果转换后还是有问题,找出哪些行存在非数值内容:

# 检查输入列中包含非数值的行
invalid_rows = df[inputs].applymap(lambda x: not isinstance(x, (int, float))).any(axis=1)
print("异常行:")
print(df[invalid_rows])

根据输出的异常行,修正CSV里的对应内容即可。

3. 读取CSV时直接指定类型

后续读取CSV时,提前指定列类型,避免自动识别错误:

# 为所有输入输出列指定float类型
dtype_dict = {col: float for col in inputs + outputs}
df = pd.read_csv('your_file.csv', dtype=dtype_dict)

内容的提问来源于stack exchange,提问作者WarSaw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:05:20