2

numpy genfromtxt を使用して csv ファイルを構造化配列に読み込もうとしています。それを並べ替えてから、groupby を使用して、列の 1 つの文字列値に基づいてファイルをグループに分ける予定です。最後に、追加の処理のために各グループの列をつなぎ合わせます。

これは、グループごとに特定の列を返したい小さな例です。

import numpy as np
from itertools import groupby

food1 = [[" vegetable", "tomato"], [" vegetable", "spinach"], [" fruit", "watermelon"], [" fruit", "grapes"], [" meat", "beef"]]

for key, group in groupby(food1, lambda x: x[0]):
    print key   
    group[:1]
# In the line above, TypeError: 'itertools._grouper' object is unsubscriptable, I have tried it with  food1 or food2
    for thing in group:     
        print key + ": "  + thing[1];       
    print " "

私が望む出力は、最初の列の値でグループ化された 2 番目の列の複数の配列を返すことです。

野菜:[「トマト」、「ほうれん草」]、果物:[「スイカ」、「ブドウ」] ...など。

groupby からのグループの戻り値をスプライスしようとしましたが、イテレータであるため、TypeError: 'itertools._grouper' object is unsubscriptable.

genfromtxt からロードされたデータをスプライスできることはわかっていますが、最初にグループ化してからスプライシングするという組み合わせが問題を引き起こしています。

data = np.genfromtxt("file.txt", delimiter=',', skiprows=3)
# splicing a column from the ndarray read from the csv file
column2 = data[:,2];

このグループを完成させてスプライスする方法はありますか?

ありがとう。

4

1 に答える 1

2

私はあなたがこれをやろうとしていると思います:

from itertools import groupby

food1 = [[" vegetable", "tomato"], [" vegetable", "spinach"], [" fruit", "watermelon"], [" fruit", "grapes"], [" meat", "beef"]]

data={}
for key, group in groupby(sorted(food1), key=lambda x: x[0]):
    data[key.strip()]=[v[1] for v in group]

データは次のとおりです。

{'vegetable': ['tomato', 'spinach'], 
 'fruit': ['watermelon', 'grapes'], 
 'meat': ['beef']}
于 2013-07-10T03:15:10.627 に答える