Python Pandas数据帧:收集列的值

时间:2016-04-04 19:29:33

标签: python pandas dataframe

我有以下数据框:

      var_1     var_2                         item_list 
0         0         1         [beer, apple, pear, rice]    
1         0         1          [egg, banana, oil, pear]   
2         0         1                    [beer, noodle]    
3         1         0                    [tomato, milk]    
4         1         0                           [apple] 

是否可以使用数据框应用功能收集item_list中的所有项目?输出应该类似[beer, apple, pear, rice, egg, banana, oil, pear, ...],列表中没有重复项。

或者我必须逐个单元地迭代以将所有值收集到一个列表中?

3 个答案:

答案 0 :(得分:2)

如果您的DataFrame是df,那么您可以使用

import itertools

itertools.chain.from_iterable(df.item_list)

创建所有项目的可迭代。如果你这样做

list(itertools.chain.from_iterable(df.item_list))

然后它将成为一个列表。

示例

import pandas as pd

df = pd.DataFrame({'item_list': [[1, 2], [3, 4]]})

import itertools

>>> list(itertools.chain.from_iterable(df.item_list.values))
[1, 2, 3, 4]

答案 1 :(得分:2)

我认为您可以apply Seriesstack并转换tolist

print df['item_list'].apply(pd.Series).stack().tolist()
['beer', 'apple', 'pear', 'rice', 'egg', 'banana', 'oil', 
 'pear', 'beer', 'noodle', 'tomato', 'milk', 'apple']

如果您需要删除重复项,请使用drop_duplicatesset

print df['item_list'].apply(pd.Series).stack().drop_duplicates().tolist()
['beer', 'apple', 'pear', 'rice', 'egg', 'banana', 'oil', 'noodle', 'tomato', 'milk']

print list(set(df['item_list'].apply(pd.Series).stack().tolist()))
['tomato', 'oil', 'apple', 'pear', 'milk', 'beer', 'noodle', 'rice', 'egg', 'banana']

编辑:

如果您需要首先删除每行中的重复项:

print df['item_list'].apply(lambda x: pd.Series(list(set(x)))).stack().drop_duplicates().tolist()

答案 2 :(得分:1)

> l= list(df['item_list'] 
> flattened_list = [item for sublist in l for item in sublist]
> flattened = set(flattened_list)
> pprint.pprint(flattened)
{'apple',
 'banana',
 'beer',
 'egg',
 'milk',
 'noodle',
 'oil',
 'pear',
 'rice',
 'tomato'}

希望有所帮助。