我正在尝试压缩包含列表列表的pandas.DataFrame
列的内容,但是找不到正确的输出方法。
而不是在StackOverflow中询问有关同一主题的different question,而是焦点是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 :(得分:1)
只需将联接更改为:
join = lambda list_of_lists: (val for sublist in list_of_lists for val in sublist if isinstance(sublist, list))
这是输出:
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
答案 1 :(得分:0)
我也有类似的情况,但是列表中有整数而不是字符串。 Alex的解决方案引发了 return Promise.resolve(
() => {
return ref.function(value);
}).then(
k => {
...
}).catch(
err => {
updateDB.updateOne({query}).then((doc)=>{}) //revert back the update done earlier incase of error when invoked function has an error (2)
callBack(err);
});
异常,因此我改用了此函数:
TypeError: 'int' object is not iterable
并像这样应用它:
def concat_lists(x):
times = []
try:
for item in x:
for time in item:
times.append(time)
return times
except TypeError:
return x