2016-09-21 2 views
0

私はパンダのデータフレームに関数を適用しようとしています。そのような関数は2つのnp.arrayを入力として必要とし、よく定義されたモデルを使用します。パンダは列の型をリストからnp.arrayに変換します

重要なのは、選択された列から始まるこの関数は、「行」にはJSONファイルから読み込まれたリストがあり、np.arrayでは読み込まれないためです。

は今、私は別の解決策を試してみた:

#Here is where I discover the problem 

train_df['result'] = train_df.apply(my_function(train_df['col1'],train_df['col2'])) 

#so I've tried to cast the Series before passing them to the function in both these ways: 

X_col1_casted = trai_df['col1'].dtype(np.array) 
X_col2_casted = trai_df['col2'].dtype(np.array) 

は動作しません。

X_col1_casted = trai_df['col1'].astype(np.array) 
X_col2_casted = trai_df['col2'].astype(np.array) 

は機能しません。

X_col1_casted = trai_df['col1'].dtype(np.array) 
X_col2_casted = trai_df['col2'].dtype(np.array) 

does'nt work。私は今何を考えてることのような長い手順です

:リストに変換し、uncastedカラム系から始まる

()、それらに反復np.arrayに関数を適用()結果を一時的なリストに追加します。完了したら、このリストを新しい列に変換します。 (明らかに、うまくいけば分かりません)

私を助ける方法を知っている人はいますか?

EDIT: 私は明確にする一つの例を追加します。

関数は、入力として2 np.arraysを持っていると仮定します。現在は、jsonファイルから検索されるので、2つのリストがあります。状況は次のとおりです。

col1  col2 result 
[1,2,3]  [4,5,6] [5,7,9] 
[0,0,0]  [1,2,3] [1,2,3] 

明らかに、関数は合計ではなく、独自の関数です。しばらくの間、この合計は配列から始まってフォームリストではなく、何ができるのでしょうか?これに各要素を変換するために、事前

+0

使用 '.values'属性へそれを配列に変換します。 –

+0

あなたはまた私に教えてもらえますか? 1回のショットで列全体ではなく、単一のセル要素に使用する必要があります。私は行ごとに1つの配列が必要です。 – LeoCella

+0

*行ごとに1つの配列*を意味しますか?私はあなたが列全体を列挙型配列に変換したいという質問から理解しました。 – AlvaroP

答えて

4

使用apply

おかげで同等の配列です:

df['col1'] = df['col1'].apply(lambda x: np.array(x)) 

type(df['col1'].iloc[0]) 
numpy.ndarray 

データ:

df = pd.DataFrame({'col1': [[1,2,3],[0,0,0]]}) 
df 

Image

+1

完璧、ありがとう! – LeoCella

+0

'df ['col1'] = df ['col1']。apply(np.array)'も同様に動作します – tenpercent

関連する問題