1

さまざまな属性 (列) を持つ複数の観測 (行) で構成されるデータセット (ファイル内) があります。例えば:

AttrA   AttrB   AttrC
 1       12      'a'
 2       43      'd'
 3       23      'f'
 4       25      'z' 

このデータセットを次のような python 辞書に入れました。

data = {'AttrA':[1,2,3,4],'AttrB':[12,43,23,25],'AttrC':['a','d','f','z']}

キーの1つの基準に基づいて観察をフィルタリングできるようにしたいと思います。例えば。次のように、AttrA >= 3 の観測をフィルター処理します。

 AttrA   AttrB   AttrC
 3       23      'f'
 4       25      'z' 

また

reducedData = {'AttrA':[3,4],'AttrB':[23,25],'AttrC':['f','z']}

次のようなことができるように思えます: reduceddata = {(k,v) for k,v in data if (??)}、しかし if ステートメントの後に何が起こるかわかりません。また、辞書はこの例で使用するのに最適なデータ型ですか? データがネストされたリストにあると、フィルタリングが簡単になるようです。

前もって感謝します!!

4

3 に答える 3

2

最初に構造を変更します。

table = [dict(zip(data.keys(), row)) for row in zip(*data.values())]

次のようになります。

[{'AttrA': 1, 'AttrB': 12, 'AttrC': 'a'},
 {'AttrA': 2, 'AttrB': 43, 'AttrC': 'd'},
 {'AttrA': 3, 'AttrB': 23, 'AttrC': 'f'},
 {'AttrA': 4, 'AttrB': 25, 'AttrC': 'z'}]

これで、説明したとおりにフィルタリングできます。

[row for row in table if row['AttrA'] >= 3]
于 2013-06-02T04:09:17.803 に答える
1
def my_filter(data,attr,val):
    ind = [i for i,x in enumerate(data[attr]) if x >= val]
    reducedData  = {k: [v[i] for i in ind] for k,v in data.items()}
    return reducedData 

data = {'AttrA':[1,2,3,4],'AttrB':[12,43,23,25],'AttrC':['a','d','f','z']}

print my_filter(data, 'AttrA',3)

出力:

{'AttrB': [23, 25], 'AttrC': ['f', 'z'], 'AttrA': [3, 4]}
于 2013-06-02T04:04:37.957 に答える
0

私は一緒に行くと思います:

data = [(12, 'a'), (43, 'd'), (23, 'f'), (25, 'z')]
data_dic = dict(enumerate(data, 1))
reducedData = {k:v for k, v in data_dic if k >= 3}
于 2013-06-02T04:09:41.007 に答える