pandas 如何将 Dataframe 转换为Tensor

91zkwejq  于 2023-04-19  发布在  其他
关注(0)|答案(3)|浏览(275)

我有一个这样的dataframe:

ids  dim
0         1    2
1         1    0
2         1    1
3         2    1
4         2    2
5         3    0
6         3    2
7         4    1
8         4    2
9         Nan  0
10        Nan  1
11        Nan  0

我想用它构建一个tensorflowTensor,结果如下所示:这里的列对应于df中的dim列,因为我们有三个不同的值(0,1,2),所以等价的Tensor将有三列。
Tensor的值是df中相关的id s。
我做了什么:
我尝试将df转换为numpy,然后将其转换为Tensor,然而,结果看起来不像我想要的:

tf.constant(df[['ids', 'dim']].values, dtype=tf.int32)
iszxjhcz

iszxjhcz1#

检查我的代码:

import numpy as np
import pandas as pd
import tensorflow as tf

df = pd.DataFrame([[1, 2],
                   [1, 0],
                   [1, 1],
                   [2, 1],
                   [2, 2],
                   [3, 0],
                   [3, 2],
                   [4, 1],
                   [4, 2],
                   [np.nan, 0],
                   [np.nan, 1],
                   [np.nan, 0]], columns=['ids', 'dim'])
dim_array = np.array(df['dim'])
sort = dim_array.argsort()
final = np.array([df.ids[sort]]).reshape((3, 4)).T
final_result = tf.constant(final, dtype=tf.int32) # use tf.float32 to retain nan in tensor
print(final_result)

# <tf.Tensor: shape=(4, 3), dtype=int32, numpy=
# array([[          1,           1,           1],
#        [          3,           2,           2],
#        [-2147483648,           4,           3],
#        [-2147483648, -2147483648,           4]], 
# dtype=int32)>

在tensorflow中,nan会丢失一些值。

isr3a4wc

isr3a4wc2#

您可以使用pd.pivot_table()进行简洁的计算

df = pd.DataFrame([[1, 2],
                   [1, 0],
                   [1, 1],
                   [2, 1],
                   [2, 2],
                   [3, 0],
                   [3, 2],
                   [4, 1],
                   [4, 2],
                   [np.nan, 0],
                   [np.nan, 1],
                   [np.nan, 0]], columns=['ids', 'dim'])

df['val'] = 1
df = df.pivot_table(index='ids',columns='dim',values='val') 
df = df.multiply(np.array(df.index), axis=0)

tensor = tf.constant(df)
biswetbf

biswetbf3#

试 Torch

item=torch.tensor(df.values)

相关问题