【问题标题】:Extracting Dates and Large Numbers Using Regex使用正则表达式提取日期和大数
【发布时间】:2020-06-07 13:35:03
【问题描述】:

所以我有一个数据框,可乐中的每一行都包含这样的字符串中的电影信息:

“The Shellshock (2014) 预算:35,000,000 发行日期:10/11/2014 屏幕尺寸:2515 增强版 1.1”

我试图在他们自己的列中提取预算和日期。预算可以从1,000,000到150,000,000并且日期是mm-dd-yyyy

第一个正则表达式是我创建的,但它返回的是 NaN 值:'(

第二个是我从 StackOverflow 尝试过的几个之一。它返回“错误的项目数通过 3,位置意味着 1”。所以它与其他数字匹配?

df['colb'] = df['cola'].str.extract(r'^\d{1,3}(,\d{3})(,\d{3})', expand=True)

df['colc'] = df['cola'].str.extract(r'^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$', expand=True)

非常感谢您对这些模式的任何帮助!

【问题讨论】:

  • 您可以尝试不使用锚点 ^$\d{1,3}(,\d{3})(,\d{3}) 也可以匹配超过 150,000,000 个
  • 对于日期,r'(?<!\d)((?:0?[1-9]|1[012])[- /.](?:0?[1-9]|[12][0-9]|3[01])[- /.](?:19|20)\d\d)(?!\d)' 可以。 r'(?<!\d)(\d{1,3}(?:,\d{3}){2,})(?!\d)' 将用于预算数字。

标签: python regex pandas dataframe


【解决方案1】:

您的模式中有多个捕获组,每个捕获组返回一个列。所以第一个命令给你两列,第二个给你三列。您不能将两列/三列数据分配为新列。此外,^ 表示字符串的开头,$ 表示结尾。你不想要它们,因为你的模式在中间。

然后你可以这样做:

df['colb'] = df['cola'].str.extract(r'(\d{1,3},\d{3},\d{3})', expand=True)

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2019-07-17
    • 2019-12-14
    • 2015-01-12
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多