【问题标题】:Regex findall then split values into columns [closed]正则表达式 findall 然后将值拆分为列 [关闭]
【发布时间】:2020-01-05 11:06:55
【问题描述】:

使用str.extract 然后进行 str 拆分,我得到的错误是:

ValueError: 传递的项目数错误 18,位置暗示 1

原始数据拆分如下所示:

[('', '', '', '', '220', '5', '1', '97.35', '94.69', '641632.16', '2998.28', '80', '', '226', '6', '220', '0', '443')]

[('08/02/2019', '', '79', '123', '162', '5', '1', '71.68', '69.03', '441381.64', '2829.37', '14', '', '226', '2', '224', '62', '271')]

[('08/03/2019', '175', '58', '71', '162', '5', '1', '71.68', '69.03', '441381.64', '2829.37', '14', '', '226', '2', '224', '62', '271')]

[('08/04/2019', '162', '88', '85', '165', '0', '0', '73.01', '73.01', '467773.78', '2834.99', '10', '', '226', '1', '225', '60', '272')]

脚本:

df['Description'].str.findall(expression)
df
expression = r"([0-9]{2}\/[0-9]{2}\/[0-9]{4})?\s{5,6}(\d+)?\s{3}(\d+)?\s{3,4}(\d+)?\s{2,10}(\d+)?[|]\s{4}(\d+)?\s{5}(\d+)?[|]\s{1}(\d+[.]\d+)\s{1}(\d+[.]\d+)[|]\s{2}(\d+[.]\d+)\s{4}(\d+[.]\d+)[|]\s{3,4}(\d+)?\s{3,5}(\d+)?[|]\s{2}(\d+)?\s{3,4}(\d+)?\s{2,3}(\d+)?\s{2,4}(\d+)?[|]\s{3,4}(\d+)?"

df['Description']是拆分前的原始数据。

【问题讨论】:

  • 无法从中理解您要做什么。 expressiondf 是什么?
  • 嗨@NFB,感谢您提出这个问题。 expression 是正则表达式,而 df 是来自 csv 的数据框。
  • 看起来像str.findall 的常见问题。将所有捕获组替换为非捕获组(或者,(\d+)? => \d*)。然而,这个模式太笨拙了——它应该匹配什么?
  • 嗨@WiktorStribiżew,运行以下代码,这就是我得到值错误的方式。 ``` # gg['Desc'] = gg['Description'].str.extract(expression) # gg['Desc'] = gg['Desc'].split(', ') # print (gg[ 'Desc'])```
  • 不,我的意思是用非捕获组替换捕获组。不使用str.extract

标签: python regex pandas


【解决方案1】:

工作

valueA = gg['Description'].str.extract(expression, expand=True)

但代码没有:

gg['Des'] = gg['Description'].str.extract(expression, expand=True)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多