Python 在数据帧中将句子列表连接成一个句子

Python 在数据帧中将句子列表连接成一个句子,python,pandas,dataframe,Python,Pandas,Dataframe,我尝试将多个句子列表连接成1,但失败: 例如,我有这个数据帧df(2行): 预期的结果是: text ================================== ["Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis no

我尝试将多个句子列表连接成1,但失败: 例如,我有这个数据帧df(2行):

预期的结果是:

text
==================================
["Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.]
[Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.]
我尝试使用:

df['text'] = df['text'].str.join(' ')

但是它将单词分隔成字符,并且句子没有连接起来

您正在连接每一行的字母,但希望连接所有行。 试试这个:

import pandas
df = pandas.DataFrame()
df["text"] = ["Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
" Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]
df['text'] = " ".join(df['text'])
print(df['text'][0])

正如你所说,你必须使用这样的形式:

new_string = "".join(df['text'].tolist()) 
然后,您可以创建一个新的数据帧:

new_df = pd.DataFrame(data=[new_string], columns=['text'])
代码:

输入:

df['text']
Out[14]: 
0    [a, boy, is, noob]
Name: text, dtype: object
输出:

df['text']
Out[12]: 
0    a boy is noob

您可以将dataframe列转换为列表,然后使用str.join()将其连接起来

d = {'text': ["Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
"Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
" Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."]}

df = pd.DataFrame(data=d)

" ".join(list(df['text']))
这应该会产生

'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'

请注意,
“”.join()中充当分隔符的字符串可以更改。

编辑1: OP似乎希望将每行的列表连接起来。如果是这样,可以使用lambda函数

d = {'text': [["text11", "text12", "text13"],
            ["text21", "text22", "text23"],
            ["text31", "text32", "text33"]]}

df = pd.DataFrame(data=d)

df.apply(lambda x: " ".join(list(x)), axis=1)
这将产生以下输出

> df['text'].apply(lambda x: " ".join(x))
0    text11 text12 text13
1    text21 text22 text23
2    text31 text32 text33
这对我有用

df['text'] = [' '.join(map(str, l)) for l in df['text']]

什么是
print(df['text'].head(5).to_dict())
?仍然不起作用,结果仍然给出单独的文本我要求它,因为它似乎与数据有关,所以从样本数据很难了解问题出在哪里。它不起作用。你能发布完整的代码吗?所以OP说这个解决方案失败了,为什么要回答问题中发布的相同解决方案?@jezrael如果解决方案失败,那么输入必须不是结构化的。我向他展示了他使用的解决方案是恰当的。对不起,也许我的问题不够清楚,但我使用的示例只有一行,所以在一行中,它有一个句子列表。在尝试你的代码时,它把每行中的所有句子都连接起来了是的,我恐怕不清楚。那么你想让每一行的句子列表连接起来吗?我已经编辑了答案以反映每一行的列表连接。请检查编辑的答案并确认这是否是您想要的。
> df['text'].apply(lambda x: " ".join(x))
0    text11 text12 text13
1    text21 text22 text23
2    text31 text32 text33
df['text'] = [' '.join(map(str, l)) for l in df['text']]