ValueError:使用序列设置数组元素。对于熊猫专栏

时间:2017-07-12 11:34:34

标签: python pandas numpy

我无法将带有数组的pandas系列转换为数字类型。

import numpy as np
import pandas as pd

df = pd.DataFrame({"vector" : [[0.1, 0.2, 0.3]]})

然后两个:

df.vector.astype("float16")
df.vector.values.astype(np.float16)

结果

ValueError: setting an array element with a sequence.

这对我没有意义:)

此解决方法:

np.array([x for x in df.vector.values]).astype("float32")

工作得很好,但看起来很傻。

使用基于熊猫系列的列表列表进行常规astype投射有什么问题?

2 个答案:

答案 0 :(得分:0)

Pandas最适合使用标量值,因此如果使用lists arrays解决方案有点复杂,因为astype仅转换标量:

df['vec1'] = [np.array(x).astype(np.float16) for x in df.vector.values]
print (df)
            vector                          vec1
0  [0.1, 0.2, 0.3]  [0.099976, 0.19995, 0.30005]
1  [0.4, 0.5, 0.7]         [0.3999, 0.5, 0.7002]

a = np.array(df.vector.values.tolist()).astype(np.float16)
print (a)
[[ 0.09997559  0.19995117  0.30004883]
 [ 0.39990234  0.5         0.70019531]]

答案 1 :(得分:0)

由于您要在DataFrame中转换的元素是系列中的列表,因此您需要将迭代添加到矢量操作的Pandas版本中。您可以使用applymap

执行此操作
df.vector.apply(lambda x: map(np.float16, x))

输出:

0    [0.099976, 0.19995, 0.30005]