【问题标题】:Pandas, str.extract multiple expression error - ValueError: Wrong number of items passed 5, placement implies 1Pandas,str.extract 多个表达式错误 - ValueError:传递的项目数错误 5,位置暗示 1
【发布时间】:2020-04-22 12:06:50
【问题描述】:

我正在使用 pandas str.extract 方法,并通过“|”在模式中使用了多个正则表达式。 str.extract 似乎不喜欢一个以上的正则表达式。如何将“或”与提取物一起使用?

这是数据的摘录:-

Window
13/01/2020 - AM
10/01/2020
06/01/2020 -\r10/01/2020
08/01/2020 - AM
02/12/2019 -\r17/01/2020
20/01/2020 -\r21/01/2020
09/01/2020 - AM

这里是代码:-

part_b = df.loc[df['Release_Date'].str.contains("Part B")]

regex_string = '(^\d{2}\/\d{2}\/\d{4}\s\-)\\r(\d{2}\/\d{2}\/\d{4})|(^\d{2}\/\d{2}\/\d{4})|[A]:\s(\d{2}\/\d{2}\/\d{4})\s\w{2}\\r\w{4}\s[B]:\s(\d{2}\/\d{2}\/\d{4})'

df['Part_b_window'] = part_b['Window'].str.extract(regex_string)

错误:-

ValueError: Wrong number of items passed 5, placement implies 1

请注意,在测试 here 时,正则表达式工作正常。

现在在 docs 中它说“一个包含两个组的模式将返回一个包含两列的 DataFrame。不匹配的将是 NaN。”但我想保留所有五个的输出在一列中,因为我只是从我的数据集的混乱中提取好的数据。请问我该怎么做?

【问题讨论】:

  • “帕特”是什么意思? (第一句)。
  • 对不起,'正则表达式模式'。
  • 所以我找到了这个解决方案,但似乎有点啰嗦。解决方案是输出到多个列,然后使用 where 方法合并回来。 link

标签: python regex pandas dataframe extract


【解决方案1】:

所以我现在有这个工作。我有点误解了这个问题,但是打印这个变量我可以看到 str.extract 的输出正在工作,而且当我尝试分配给 df 时,出现了不匹配。

我调整了这段代码以分配给变量 t。

t = df['Release_Date'].str.extract('(?:.*\:\s)(.*)\\r|(^\d{2}\/\d{2}\/\d{4})|(^\d{2}\/\d{2}\/\d{4}\*)|\\r(\d{2}\/\d{2}\/\d{4})') 
print(t)

这是 t 的输出。

这是我用来解决问题的代码。

df['Part_b_window'] = t[0].fillna(t[1]).fillna(t[2]).fillna(t[3]).fillna(t[4]).fillna('Miscellaneous')

问题解决了。

【讨论】:

    【解决方案2】:

    我在使用下面的正则表达式的提取方法时遇到了同样的问题:

    .str.extract(r'(_(\d{4}|\d{3}|\d{2})_metre_)')
    

    然后我只是将其设置为不捕获组:

    .str.extract(r'(_(?:\d{4}|\d{3}|\d{2})_metre_)')
    

    所以这解决了我的问题。如果它作为一个简短的解决方案适合您,请投票!

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 2021-08-10
      • 2021-07-13
      • 2021-04-08
      • 2020-01-30
      • 2019-09-23
      • 2021-07-05
      • 2021-09-25
      • 2016-02-14
      相关资源
      最近更新 更多