如何将数据框列中的列表合并为单个列表?

4
一些背景,我有一些数据正在进行文本分析,我刚刚对它们进行了令牌化,并且我想将数据帧列中的所有列表合并以进行进一步处理。
我的数据框如下:
df = pd.DataFrame({'title': ['issue regarding app', 'graphics should be better'], 'text': [["'app'", "'load'", "'slowly'"], ["'interface'", "'need'", "'to'", "'look'", "'nicer'"]]})`

我想要将“text”列中的所有列表合并为一个列表,并删除开/关的引号。
就像这样:
lst = ['app', 'load', 'slowly', 'interface', 'need', 'to', 'look', 'nicer']`

感谢您的所有帮助!

3个回答

4

你可以通过使用applylambda来实现这一点。

apply方法的使用是将函数应用于'text'列中的每个元素,而sum函数则是将所有列表连接在一起。

lst = sum(df["text"].apply(lambda x: [i.replace("'", "") for i in x]), [])

输出:

['app', 'load', 'slowly', 'interface', 'need', 'to', 'look', 'nicer']

如果你想替换多个元素,例如"'“"a",使用translate会比replace更有效率:

trans = str.maketrans("", "", "'a")
lst = sum(df["text"].apply(lambda x: [i.translate(trans) for i in x]), [])

1
使用 sum 函数来展开一个列表的列表可能看起来很花哨,但是它是低效的(参见 https://dev59.com/Zp3ha4cB1Zd3GeqPQS0z)。 - mozway
如果我们想要应用(替换)两个东西,应该怎么做? - Shahriyar Shamsipour
它返回了一个看起来像这样的列表:['[', '', 'a', 'p', 'p', '', ' ', 'l', 'o', 'a', 'd', '', ...] - Qaaqq11282211
@ShahriyarShamsipour 我在我的答案底部添加了回复您问题的内容。 - Jamiu S.
@Qaaqq11282211 我认为你可能遗漏了某些东西。我提供的代码就像预期的那样正常工作。 - Jamiu S.

3
使用简单的列表推导式:
out = [x.strip("'") for l in df['text'] for x in l]

输出:

['app', 'load', 'slowly', 'interface', 'need', 'to', 'look', 'nicer']

如果我们想将strip()应用于两个事物,该怎么办? - Shahriyar Shamsipour
1
two things” 是什么意思? - mozway
两个字符。例如,就像您删除“'”一样,也要删除“a”。 - Shahriyar Shamsipour
这取决于如何操作。您可以尝试使用 strip("'a") 来删除 'a 字符。如果这不能满足您的需求,请在问题中提供明确的示例。 - mozway
我也尝试过这个,但它返回了类似于上面的东西,如下所示: ['[', '', 'a', 'p', 'p', '', ' ', 'l', 'o', 'a', 'd', '', ...] - Qaaqq11282211
@Qaaqq11282211 这意味着您没有列表,而是一个字符串表示(提供的示例不正确)。请使用ast.literal_eval进行转换。 - mozway

2
我们还可以通过使用append()迭代每个列表并将它们连接起来,最后使用concat()将它们转换为一个列表。输出与上面相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接