我无法将带有数组的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投射有什么问题?
答案 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版本中。您可以使用apply
和map
:
df.vector.apply(lambda x: map(np.float16, x))
输出:
0 [0.099976, 0.19995, 0.30005]