【问题标题】:Pandas - 如何通过特定字符的索引将字符串列拆分为几列?
【发布时间】:2022-01-23 16:16:39
【问题描述】:

我想从名为“filename”的字符串列中提取用户 ID,并创建一个新的 ID 列, 基于原始字符串中特定字符的索引。

“文件名”中字符串的两个示例,ID 为 2 位或 3 位数字:

  1. 文件名 = ID100session1neg_emotions_rating.csv ---> ID = 100

  2. 文件名 =ID21session2neu_emotions_rating.csv ---> ID = 21

我试过了-

df['ID '] = df.filename.str[2:**4**]

但我找不到每行切片的 ID 的结束索引(它是 3 或 4,取决于 ID 的长度为 2 位或 3 位)。

在数据框中的每一行之后找到“s”的索引将解决我的问题。 简单的选项对我不起作用 -

s_index = df.filename.str.index("s")

(我也尝试了一些拆分选项,但我没有逗号等特定字符来拆分)

非常感谢! 对不起,如果它与上一个问题重复

【问题讨论】:

    标签: python pandas string indexing split


    【解决方案1】:

    我会使用带有str.extract 的正则表达式:

    s_index = df.filename.str.extract("^ID(\d+)")
    

    作为整数:

    s_index = df.filename.str.extract("^ID(\d+)").astype(int)
    

    Regex101 explanation

    【讨论】:

      【解决方案2】:

      正则表达式的替代方法可能是最好的答案,首先在“会话”上使用 split 并抓取第一个元素,然后再使用另一个 split 抓取最后一个元素:

      df['ID'] =  df.filename.str.split('session').str[0].str.split('ID').str[1]
      

      【讨论】:

      • 谢谢!我收到此错误消息: AttributeError: 'Series' object has no attribute 'split
      • 你能再试一次吗@omer?我稍微修改了答案。
      • 下雪了,谢谢!
      • 谢谢!请不要忘记为所有有助于鼓励参与的答案投票,并勾选一个答案以接受它。再次感谢。
      猜你喜欢
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2023-04-01
      • 2016-03-24
      • 2022-12-29
      • 1970-01-01
      相关资源
      最近更新 更多