numpy ValueError:使用序列设置数组元素,Pandas专栏

ljo96ir5  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(104)

我在将一个包含数组的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")

工程.
使用基于pandas系列的列表列表的常规astype转换有什么问题?

vnjpjtjt

vnjpjtjt1#

Pandas最适合标量值,所以如果使用arrayslists解决方案有点复杂,因为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]]
jchrr9hc

jchrr9hc2#

由于您希望在DataFrame中转换的元素是Series中的列表,因此您需要向向量操作的Pandas版本添加迭代。你可以用applymap来实现:

df.vector.apply(lambda x: map(np.float16, x))

输出量:

0    [0.099976, 0.19995, 0.30005]

相关问题