Python Pandas将字符串序列连接成一个字符串

19
在Python的pandas库中,有一个由字符串值组成的Series/dataframe列需要合并为一个长字符串:
df = pd.DataFrame({'text' : pd.Series(['Hello', 'world', '!'], index=['a', 'b', 'c'])})

目标:'Hello world !'

到目前为止,像df['text'].apply(lambda x: ' '.join(x))这样的方法只返回Series。

最好的方法是什么来获得连接后的字符串?

3个回答

33
你可以直接在序列上使用join方法连接字符串:
In [3]:
' '.join(df['text'])

Out[3]:
'Hello world !'

1
我在进行以下操作时遇到了错误: “TypeError: sequence item 0: expected str instance, list found”。这是在Python3中,你能指导一下吗? - pnv
1
@user1930402在SO的评论中提问是不好的做法,错误信息很清楚,您的数据框中有列表而不是字符串,因此出现了错误。由于我无法访问您的计算机,我只能猜测您出于某种原因将列表存储在df中,这是不可取的。我不能帮助您,您需要发布一个新问题,您还应该问问自己是否真的需要存储列表,当您存储非标量值时,使用pandas就失去了意义。 - EdChum

13

除了join之外,您还可以使用pandas字符串方法.str.cat

In [171]: df.text.str.cat(sep=' ')
Out[171]: 'Hello world !'

然而,join()的速度要快得多。


写得更快还是运行得更快?你能提供结果吗? - young_souvlaki

3

你的代码返回了“系列”,因为你没有指定正确的轴。尝试使用以下代码:

df.apply(' '.join, axis=0)
text    Hello world !
dtype: object

指定axis=0将从每列中组合所有值并将它们放入单个字符串中。返回类型是一个系列,其中索引标签是列名,值是相应的连接字符串。如果您想一次将多个列组合成单个字符串,则特别有用。
通常我发现在使用apply时很难理解需要哪个轴,所以如果它不按照您认为的方式工作,请尝试沿另一个轴应用。

有用的描述 +10,但请注意您正在使用 df.apply,而 OP 使用了 df['text'].applySeries.apply 没有 axis)。 - tdy
@tdy 这是真的。这是因为Series.apply通常一次只处理单个值,更像DataFrame.applymap。从Series.apply文档中可以看到:“在Series的值上调用函数。可以是ufunc(适用于整个Series的NumPy函数)或仅适用于单个值的Python函数。” - Alex

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