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

将DataFrame转为PyTorch Tensor时遇numpy.object_类型转换错误求助

解决DataFrame转PyTorch Tensor的类型转换错误

问题根源

你的DataFrame包含字符串类型列(如Airline name、Depreture Airport)和未转换的时间列,这些列转成numpy数组时会变成object类型,而PyTorch Tensor仅支持数值类型(float/int/complex系列),因此抛出转换错误。

解决方案步骤

核心是将所有非数值列转换为数值类型,具体分为以下几步:


1. 处理时间类列

将时间格式的列(如Depreture Time、Travel Time)转换为分钟数或时间戳等数值:

# 示例:将HH:MM格式的起飞时间转为分钟数
df_1['Depreture Time'] = pd.to_datetime(df_1['Depreture Time'], format='%H:%M').dt.hour * 60 + pd.to_datetime(df_1['Depreture Time'], format='%H:%M').dt.minute

# 示例:将"Xh Ym"格式的飞行时间转为分钟数
def time_to_minutes(time_str):
    if pd.isna(time_str):
        return 0
    hours, minutes = 0, 0
    for part in str(time_str).split():
        if 'h' in part:
            hours = int(part.replace('h', ''))
        elif 'm' in part:
            minutes = int(part.replace('m', ''))
    return hours * 60 + minutes

df_1['Travel  Time'] = df_1['Travel  Time'].apply(time_to_minutes)

2. 处理字符串分类列

有两种常用方式将字符串分类转为数值:

方式一:标签编码(Label Encoding)

适合有序分类或类别数量较少的场景,将每个唯一字符串映射为整数:

from sklearn.preprocessing import LabelEncoder

label_encoders = {}
categorical_cols = ['Airline name ', 'Depreture  Airport', '1st Stoppage']

for col in categorical_cols:
    le = LabelEncoder()
    # 先转字符串避免空值报错
    df_1[col] = le.fit_transform(df_1[col].astype(str))
    label_encoders[col] = le  # 保存编码器,后续预测时可用
方式二:独热编码(One-Hot Encoding)

适合无顺序的分类变量,生成二进制列避免模型误解类别顺序:

# 对分类列执行独热编码,drop_first避免多重共线性
df_encoded = pd.get_dummies(df_1, columns=['Airline name ', 'Depreture  Airport', '1st Stoppage'], drop_first=True)

3. 处理缺失值

若数据存在空值,需先填充(数值列用均值/中位数,分类列用最常见类别):

# 填充数值列空值为均值
numeric_cols = df_1.select_dtypes(include=['int64', 'float64']).columns
df_1[numeric_cols] = df_1[numeric_cols].fillna(df_1[numeric_cols].mean())

# 填充分类列空值为最常见类别
for col in categorical_cols:
    df_1[col] = df_1[col].fillna(df_1[col].mode()[0])

4. 转换为PyTorch Tensor

确认所有列均为数值类型后,即可转换:

# 若用标签编码后的原df
train_x = torch.tensor(df_1.values, dtype=torch.float32)

# 若用独热编码后的df
train_x = torch.tensor(df_encoded.values, dtype=torch.float32)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:42:08