因此,您的数据框显示为:
In [161]: df
Out[161]:
Y X
0 1 [[0,1],[0,1]]
1 0 [[1,0],[1,0]]
虽然这并没有显示字符串引号。
In [162]: df['Y'].values
Out[162]: array([1, 0])
这个
X
列是字符串的1d数组,对象数据类型:
In [163]: df['X'].values
Out[163]: array(['[[0,1],[0,1]]', '[[1,0],[1,0]]'], dtype=object)
在评估中,
values
现在是一系列列表:
In [164]: from ast import literal_eval
In [165]: df['X'].apply(literal_eval)
Out[165]:
0 [[0, 1], [0, 1]]
1 [[1, 0], [1, 0]]
Name: X, dtype: object
In [166]: df['X'].apply(literal_eval).values
Out[166]: array([list([[0, 1], [0, 1]]), list([[1, 0], [1, 0]])], dtype=object)
但如果我们将其提取为一个列表:
In [168]: df['X'].apply(literal_eval).to_list()
Out[168]: [[[0, 1], [0, 1]], [[1, 0], [1, 0]]]
我们可以很容易地将其转化为一个数组:
In [169]: np.array(_)
Out[169]:
array([[[0, 1],
[0, 1]],
[[1, 0],
[1, 0]]])
回到数组形式,我们可以使用
stack
In [170]: np.stack(df['X'].apply(literal_eval).values)
Out[170]:
array([[[0, 1],
[0, 1]],
[[1, 0],
[1, 0]]])
堆栈
就像
concatenate
或
vstack
除了它增加了一个维度,表现得更像
np.array
.
现在,tensorflow转换应该可以工作了。
你的第二个
apply
,仅将列表数组更改为数组数组。
In [174]: df['X'].apply(literal_eval).apply(np.array).values
Out[174]:
array([array([[0, 1],
[0, 1]]), array([[1, 0],
[1, 0]])], dtype=object)
np.stack
这方面也很有效。