Python Pandas 将一系列字符串连接成一个字符串
Posted
技术标签:
【中文标题】Python Pandas 将一系列字符串连接成一个字符串【英文标题】:Python Pandas concatenate a Series of strings into one string 【发布时间】:2017-05-14 23:59:11 【问题描述】:在 python pandas 中,有一个包含 str 值的 Series/dataframe 列可以组合成一个长字符串:
df = pd.DataFrame('text' : pd.Series(['Hello', 'world', '!'], index=['a', 'b', 'c']))
目标:“世界你好!”
到目前为止,df['text'].apply(lambda x: ' '.join(x))
等方法仅返回系列。
达到目标连接字符串的最佳方法是什么?
【问题讨论】:
【参考方案1】:您可以直接在系列上join
一个字符串:
In [3]:
' '.join(df['text'])
Out[3]:
'Hello world !'
【讨论】:
执行此操作时出现错误:“TypeError: sequence item 0: expected str instance, list found”。这是在python3中的,请指导一下吗? @user1930402 在 cmets 中提问在 SO 上的形式很差,错误消息很清楚,您的数据框中有列表而不是字符串,因此出现错误。由于我无法访问您的计算机,因此我只能推测出于某种原因您将列表存储在 df 中,这是不可取的。我帮不了你,你需要发布一个新问题,你还应该问自己是否真的需要存储列表,当你存储非标量值时,它违背了使用 pandas 的意义【参考方案2】:除了join
,你还可以使用pandas字符串方法.str.cat
In [171]: df.text.str.cat(sep=' ')
Out[171]: 'Hello world !'
不过,join()
要快得多。
【讨论】:
【参考方案3】:您的代码是“返回系列”,因为您没有指定正确的轴。试试这个:
df.apply(' '.join, axis=0)
text Hello world !
dtype: object
指定axis=0 将每一列 中的所有值组合起来,并将它们放在一个字符串中。返回类型是一个系列,其中索引标签是列名,值是相应的连接字符串。如果您想一次将多个列组合成一个字符串,这将特别有用。
通常,我发现在使用 apply 时很难理解您需要哪个轴,所以如果它没有按照您认为的方式工作,请始终尝试沿另一个轴应用。
【讨论】:
有用的描述 +10,但请注意,您使用的是df.apply
,而 OP 使用的是 df['text'].apply
(Series.apply 没有 axis
)
@tdy 这是真的。这是因为 Series.apply 通常一次只处理单个值,更像 DataFrame.applymap。来自 Series.apply 文档:“对 Series 的值调用函数。可以是 ufunc(适用于整个 Series 的 NumPy 函数)或仅适用于单个值的 Python 函数。”以上是关于Python Pandas 将一系列字符串连接成一个字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将一系列数组转换为 pandas/numpy 中的单个矩阵?
Pandas: 如何将一列中的文本拆分为多行? | Python