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
相关产品推荐
相关产品推荐

