2015-09-30 90 views
0

我想扁平列表中包含列表的列表pandas.DataFrame的內容,但是我找不到正確的輸出方式。用熊貓扁平化淺列表

而不是一個different question問在StackOverflow關於同一主題,這裏的重點是在pandas.DataFrame的每一行內的奉承過程。

這裏是一個玩具例子:

df = pd.DataFrame({ 'recipe': [['olive oil', 
          'low sodium chicken broth', 
          'cilantro leaves', 
          'chile powder', 
          'fresh thyme'], 
          ['coconut milk', 'frozen banana', 'pure acai puree', 'almond butter'], 
          ['egg', 
          'whole milk', 
          'extra-virgin olive oil', 
          'garlic cloves', 
          'corn kernels', 
          'chicken breasts']], 
        'category': ['A', 'B', 'B'] 
        }) 
df_grouped = df.groupby('category')['recipe'].apply(lambda x: x.tolist()) 
df_grouped = df_grouped.reset_index() 
df_grouped['recipe'][1] 

這產生下面的輸出:

[['coconut milk', 'frozen banana', 'pure acai puree', 'almond butter'], ['egg', 'whole milk', 'extra-virgin olive oil', 'garlic cloves', 'corn kernels', 'chicken breasts']] 

我的目標是要合併逐行單詞或句子的每個列表。 我試着用下面的代碼,但它分裂每個字母。

join = lambda list_of_lists: (val for sublist in list_of_lists for val in sublist) 
df_grouped['merged'] = df_grouped['recipe'].apply(lambda x: list(join(x))) 

df_grouped['merged'] 

此產品:

0 [o, l, i, v, e, , o, i, l, l, o, w, , s, o, ... 

1 [c, o, c, o, n, u, t, , m, i, l, k, f, r, o, ... 

我想下面的輸出的每一行,一個陣列的所有字

['coconut milk', 'frozen banana', 'pure acai puree', 'almond butter', 'egg', 'whole milk', 'extra-virgin olive oil', 'garlic cloves', 'corn kernels', 'chicken breasts'] 
+0

[在Python平展淺列表]的可能重複(http://stackoverflow.com/questions/406121/flattening-a-shallow-list-in-python) –

+0

這不是一個重複的,這裏的問題是關於一個熊貓數據框,可能的重複是關於一個列表的單個列表。 – Michael

回答

1

只要改變加入到:

join = lambda list_of_lists: (val for sublist in list_of_lists for val in sublist if isinstance(sublist, list)) 

這裏是outp UT:

In[69]: df_grouped['merged'] = df_grouped['recipe'].apply(lambda x: list(join(x))) 
In[70]: df_grouped['merged'] 
Out[70]: 
0 [olive oil, low sodium chicken broth, cilantro... 
1 [coconut milk, frozen banana, pure acai puree,... 
Name: merged, dtype: object 
+0

謝謝@Alex,這絕對是我的問題的解決方案。 – Michael