2017-07-12 3 views
0

配列のあるpandas系列を数値型に変換する際に問題があります。ValueError:シーケンスで配列要素を設定します。 pandas列の場合

import numpy as np 
import pandas as pd 

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

そして両方:

ValueError: setting an array element with a sequence. 

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

結果これは私には意味がありません:)

この回避策:

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

うまく動作しますが、ばかげているようです。

パンダシリーズに基づいたリストのリストを使用して通常のastypeキャストの問題は何ですか?

答えて

0

Pandasastypeはスカラーのみを変換するためarrays溶液を使用listsは、少し複雑ですので、もし、スカラー値で最適に動作:

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]] 
+0

を。これは機能か、むしろパンダのバグですか?この例外の根本原因は何ですか? – Kornel

+0

うーん、おそらく私はまだ実装されていないと言うでしょうか?そして、理由は、(私の意見では)特に、各アレイの長さが異なっていれば、問題が発生することがあります。 – jezrael

0

あなたがデータフレームに変換するために探している要素があるので、リスト内で、ベクター操作のパンダ版に反復を追加する必要があります。あなたはapplymapでこれを行うことができます。

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

出力:これは、より多くのソリューションよりも回避策のように見えるん

0 [0.099976, 0.19995, 0.30005] 
関連する問題