【问题标题】:Python Pandas concatenate a Series of strings into one stringPython Pandas 将一系列字符串连接成一个字符串
【发布时间】: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)) 等方法仅返回系列。

达到目标连接字符串的最佳方法是什么?

【问题讨论】:

    标签: string python-3.x pandas string-concatenation series


    【解决方案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'].applySeries.apply 没有 axis
      • @tdy 这是真的。这是因为 Series.apply 通常一次只处理单个值,更像 DataFrame.applymap。来自 Series.apply 文档:“对 Series 的值调用函数。可以是 ufunc(适用于整个 Series 的 NumPy 函数)或仅适用于单个值的 Python 函数。”
      猜你喜欢
      • 2017-10-25
      • 2021-05-12
      • 2013-05-15
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多