【问题标题】:Regex Search for entire column in pandas dataframe正则表达式搜索熊猫数据框中的整列
【发布时间】:2021-09-26 15:59:33
【问题描述】:

我想提取 B0153R2A9I 从数据框中的一列中的网址。 例如'http://www.example.com/zs/B0153R2A9I'

我在 reddit 组中找到了这段代码 -

import re
search = re.search(r'B[A-Z0-9]{9}', url)
print(search.group(0))

虽然这似乎适用于一个链接,但当我尝试将其应用于这样的列时 -

import re
df['code'] = re.search(r'B[A-Z0-9]{9}', "", df['pro_link'])

df['pro_link'] 列包含所有链接。 df['code'] 是要创建的新列。

我收到此错误 TypeError: 'Series' 对象是可变的,因此它们不能被散列。

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    你可以使用

    df['code'] = df['pro_link'].str.extract(r'/(B[A-Z0-9]{9})$')
    

    请参阅regex demo详情

    • / - 一个 / 字符
    • ( - 捕获组的开始:
      • B - 一个 B 字符
      • [A-Z0-9]{9} - 九个 ASCII 大写字母或数字
    • ) - 捕获组结束(Series.str.extract 必须实际返回任何内容)
    • $ - 字符串结束。

    【讨论】:

    • 对不起,我的意思是提取而不是剥离。刚刚编辑。
    • @Santoo 我更新了答案中的代码、演示链接和模式说明。
    • @WiktorStribiżew 在这里使用的是熊猫.str the string accessorsthe extract method
    • @Santoo 然后你可以使用r'/(B[A-Z0-9]{9})(?:/|$)',其中(?:/|$) 匹配/ 或字符串结尾。
    • @Wiktor。惊人的。谢谢你。我将开始学习 regex101.com。真的很感激。
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 2020-10-23
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多