2017-06-06 8 views
3

パンダのデータフレームをリストリストの配列に変換する必要があるという問題があります。パンダデータフレームをナンプィ配列にベクトル化する

サンプル:

import pandas as pd 
df = pd.DataFrame([[1,2,3],[2,2,4],[3,2,4]]) 

私は以下を返すas_matrix()関数であることがわかっている。

df.as_matrix(): 
# result:array([[1, 2, 3], 
       [2, 2, 4], 
       [3, 2, 4]]) 

はしかし、私はこのフォーマットで何か

[array([[1], [2], [3]]), 
    array([[2], [2], [4]], 
    array([[3], [2], [4]])] 

IEが必要です。リストのリストを含む配列のリストが必要です。最も内側のリストには単一の要素が含まれ、配列の最も外側のリストはデータフレームの行を表します。これは、基本的にデータフレームの各行を次元3のベクトルにベクトル化することです。

これは特にnumpyで行列/ベクトル演算を行う必要がある場合に便利です。私はデータフレームをベクトルに変換する方法を見つけるのに苦労しています。

ご協力いただければ幸いです。

答えて

4

、基本となる配列データを抽出し、最後の1に沿ってnewaxisを追加し、np.vsplitで第1の軸に沿って分割する - あなたがnumpyのを使用している場合

In [327]: df 
Out[327]: 
    0 1 2 
0 1 2 3 
1 2 2 4 
2 3 2 4 

In [328]: expected_output = [np.array([[1], [2], [3]]), 
    ...: np.array([[2], [2], [4]]), 
    ...: np.array([[3], [2], [4]])] 

In [329]: expected_output 
Out[329]: 
[array([[1], 
     [2], 
     [3]]), array([[2], 
     [2], 
     [4]]), array([[3], 
     [2], 
     [4]])] 

In [330]: np.vsplit(df.values[...,None],df.shape[0]) 
Out[330]: 
[array([[[1], 
     [2], 
     [3]]]), array([[[2], 
     [2], 
     [4]]]), array([[[3], 
     [2], 
     [4]]])] 

-

np.vsplit(df.values[...,None],df.shape[0]) 

のサンプル実行ほとんどのシナリオでは、分割をやめ、拡張された配列バージョンを直接使うことができるはずです。

今、under the hoods np.vsplitnp.array_splitを使用しています。これは基本的にループです。これは、予想される出力に記載されているよりも1つの余分の次元を持っているだろうと

np.array_split(df.values[...,None],df.shape[0]) 

注 - だから、もう少しパフォーマンスの道はそうのような、機能のオーバーヘッドを回避することです。あなたが絞り出さバージョンをしたい場合は、我々はそうのように、新しい軸拡張配列バージョンでリストの内包表記を使用することができます -

In [357]: [i for i in df.values[...,None]] 
Out[357]: 
[array([[1], 
     [2], 
     [3]]), array([[2], 
     [2], 
     [4]]), array([[3], 
     [2], 
     [4]])] 

をこのように、別の方法は、ループ内の新しい軸を追加することです -

[i[...,None] for i in df.values] 
0

まず、DataFrameをマトリックスに変換します。次に、次元を追加してそれをリストに変換します。

試してみてください。

df = pd.DataFrame([[1,2,3],[2,2,4],[3,2,4]]) 
my_matrix = df.as_matrix() 
my_list_of_arrays_of_list_lists = list(np.expand_dims(my_matrix, axis=2)) 

my_list_of_arrays_of_list_listsあなたが探しているものを表して、あなたに与えます:

Out[42]: [array([[1],[2],[3]]), 
      array([[2],[2],[4]]), 
      array([[3],[2],[4]])] 
関連する問題