【问题标题】:How to create new pandas dataframe column containing values of all other columns as a tensor?如何创建包含所有其他列的值作为张量的新熊猫数据框列?
【发布时间】:2021-03-24 00:35:08
【问题描述】:

我正在尝试创建一个新的特征列,它是一个包含现有列中的值的张量。所以如果col A的值为'1',col B的值为'0',col C的值为0,那么新的特征列的值为[1,0,0]。

我尝试了以下代码:

import numpy as np
import pandas as pd
import torch

df = pd.DataFrame({"A":[1,1,0], "B":[0,1,1], "Sentiment":[0,0,1]})

df["new_feature"] = [df["A"].values, df["B"].values, df["C"].values]

...但结果不是我需要的。结果是获取每列的值,而不是跨行的值(多列值)。例如,第一行的new_feature 列值应该是 [1,0,0] 但它显示的是 [1,1,0]

我的最终目标是获得一个数据框列,我可以将其用作火炬张量以输入到神经网络中。

【问题讨论】:

    标签: python pandas pytorch


    【解决方案1】:

    torch.from_numpyapply lambda 函数一起使用。

    df["new_feature"] = df.apply(lambda x:torch.from_numpy(x.to_numpy()), axis = 1)
    df
       A  B  C                        new_feature
    0  1  0  0  [tensor(1), tensor(0), tensor(0)]
    1  1  1  0  [tensor(1), tensor(1), tensor(0)]
    2  0  1  1  [tensor(0), tensor(1), tensor(1)]
    
    df["new_feature"][0]
    tensor([1, 0, 0])
    
    

    首先使用 pd.Series.to_numpy
    将数据帧值转换为 numpy 数组 然后使用 torch.from_numpy 将 numpy 数组转换为张量。

    【讨论】:

      【解决方案2】:

      你想要吗:

      df['new_feature'] = df.values.tolist()
      

      输出:

         A  B  C new_feature
      0  1  0  0   [1, 0, 0]
      1  1  1  0   [1, 1, 0]
      2  0  1  1   [0, 1, 1]
      

      【讨论】:

      • 不是 Pytorch 专家,但我不知何故怀疑 OP 应该想要这个。 df.values已经携带new_feature.values
      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2019-07-25
      • 2021-12-24
      相关资源
      最近更新 更多