3

マトリックスを作りたい。

入力:

data = [
    {'a': 2, 'g': 1},
    {'p': 3, 'a': 5, 'cat': 4}
    ...
]

出力:

     a  p  cat  g
1st  2  0  0    1
2nd  5  3  4    0

これは私のコードです。しかし、データサイズが巨大な場合、それは賢くなく、非常に遅いと思います。

これを行う良い方法はありますか?

ありがとうございました。

data = [
    {'a': 2, 'g': 1},
    {'p': 3, 'a': 5, 'cat': 4}
]

### Get keyword map ###
key_map = set()
for row in data:
    key_map = key_map.union(set(row.keys()))

key_map = list(key_map)    # ['a', 'p', 'g', 'cat']

### Create matrix ###
result = []
for row in data:
    matrix = [0] * len(key_map)
    for k, v in row.iteritems():
        matrix[key_map.index(k)] = v
    result.append(matrix)

print result        

# [[2, 0, 0, 1], [5, 3, 4, 0]]

編集済み

@wwii のアドバイスによる。Pandasを使用すると良さそうです。

from pandas import DataFrame

result = DataFrame(data, index=range(len(data)))
print result.fillna(0, downcast=int).as_matrix().tolist()
# [[2, 0, 1, 0], [5, 4, 0, 3]]
4

4 に答える 4

1

Pandas データフレームを使用して、2 番目に答えます。ただし、私のコードはあなたのコードよりも少し単純である必要があります。

In [1]: import pandas as pd

In [5]: data = [{'a': 2, 'g': 1},{'p': 3, 'a': 5, 'cat': 4}]

In [6]: df = pd.DataFrame(data)

In [7]: df
Out[7]: 
   a  cat   g   p
0  2  NaN   1 NaN
1  5    4 NaN   3

In [9]: df = df.fillna(0)

In [10]: df
Out[10]: 
   a  cat  g  p
0  2    0  1  0
1  5    4  0  3

私は iPython でコーディングを行いました。これを強くお勧めします。

csv に保存するには、追加のコード行を使用します。

df.to_csv('filename.csv')
于 2013-10-29T15:33:29.877 に答える