2016-09-21 7 views
2

発生例外:データは1次元でなければなりません。パンダ内でのnpの変形適用

私はこの問題を明確にするためにおもちゃの例を提示します。

import pandas as pd 
import numpy as np 

初期データフレーム:numpyの配列に

df = pd.DataFrame({"A": [[10,15,12,14],[20,30,10,43]], "R":[2,2] ,"C":[2,2]}) 
>>df 

     A     C R 
0 [10, 15, 12, 14] 2 2 
1 [20, 30, 10, 43] 2 2 

変換と再構築:

df['A'] = df['A'].apply(lambda x: np.array(x)) 
df.apply(lambda x: print(x[0],(x[1],x[2])) ,axis=1) 
df['A_reshaped'] = df.apply(lambda x[['A','R','C']]: np.reshape(x[0],(x[1],x[2])),axis=1) 
df 

     A     C R   A_reshaped 
0 [10, 15, 12, 14] 2 2  [[10,15],[12,14]] 
1 [20, 30, 10, 43] 2 2  [[20,30],[10,43]] 

誰かが理由を知っていますか?それはパンダの細胞の2次元配列を受け入れていないようだが、それは奇妙だ...

事前にお手伝いを!

+0

あなたの最後のラムダは奇妙である:それは 'ラムダX 'です:' X 'としなければならないもの。ステップを戻って、あなたがしたいことを説明できますか? –

+0

RとCによって与えられたパラメータでAの単量体配列を再形成する。この新しい行列をAに書く。 これで、期待される結果に基づいて例を編集する。 – LeoCella

+0

これは意味があります。 'apply'は直接動作しないようですが、' zip'はそれをバイパスできます。これはいくつかの新しいオブジェクトを作成するので、私はここでベクトル化が大きな問題ではないと考えています。 –

答えて

2

applyを使用すると、戻り値はnumpy 2d配列になり、DataFrameに戻すと何らかの理由でPandasが混乱することがあります。

これが動作しているようです、しかし:

df['reshaped'] = pd.Series([a.reshape((c, r)) for (a, c, r) in zip(df.A, df.C, df.R)]) 

>>> df 
        A C R    reshaped 
0 [10, 15, 12, 14] 2 2 [[10, 15], [12, 14]] 
1 [20, 30, 10, 43] 2 2 [[20, 30], [10, 43]] 
+0

ありがとうございました! – LeoCella

+0

ようこそ。ではごきげんよう。 –

関連する問題