我正在尝试使用numpy genfromtxt将csv文件读取到结构化数组中。我计划对其进行排序,然后使用groupby根据其中一列的字符串值将文件分为几组。最后,我将拼接每个组中的列以进行其他处理。

这是一个小示例,我想为每个组返回一个特定的列。

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 " "


我想要的输出是返回第二列va; ies的多个数组,这些数组按第一列的值分组,

所以
蔬菜:[“番茄”,“菠菜”],
水果:[“西瓜”,“葡萄”] ...等

我试图拼接从groupby返回的组,但是由于它是一个迭代器,因此会出现TypeError:'itertools._grouper'对象无法下标。

我知道我可以拼接从genfromtxt加载的数据,但这是先分组再拼接的组合,这给我带来了麻烦。

data = np.genfromtxt("file.txt", delimiter=',', skiprows=3)
# splicing a column from the ndarray read from the csv file
column2 = data[:,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']}

关于python - Python组和拼接:拼接从itertools.groupby返回的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17561830/

10-10 01:11