Python 提取某些字符串后的数字

标签 python regex pandas data-manipulation

我有一个如下所示的数据框

import pandas as pd
page = ['A','B','C','D']
URL = ['aaa.bbb3333.ccc.de12345.dddd.cccc','ccc2222.ddd.aaa.ho16589.ddd','ddd16893.aaa.de59875','aaa15875.ccc.ddd.ho13532']
df = pd.DataFrame({'page':page,'URL':URL})

我想创建一个列来提取“de”或“ho”后的数字。请注意,数字的长度可能不同,“de”或“ho”的位置也可能不同。

我的代码如下所示:

import re
def extract_number(df,url):
    for url in df:
        if df[url].str.contains('de', na = False) == True:
            match = re.search('de:P(\d+)')
        elif df[url].str.contains('ho', na = False) == True:
            match = re.search('ho:P(\d+)')
        else:
            match = 'not found'
        print(match)

out = extract_number(df, 'URL')

它返回错误“系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。'

所需的输出应如下所示:

import pandas as pd
page = ['A','B','C','D']
URL = ['aaa.bbb.ccc.de12345.dddd.cccc','ccc.ddd.aaa.ho16589.ddd','ddd.aaa.de59875','aaa.ccc.ddd.ho13532']
ID = ['12345','16589','59875','13532']
df = pd.DataFrame({'page':page,'URL':URL,'ID':ID})

万分感谢!!!!

最佳答案

使用带有正向lookbehind的str.extract:

df["num"] = df["URL"].str.extract(r"(?<=de|ho)(\d+)")

print (df)

#
  page                                URL    num
0    A  aaa.bbb3333.ccc.de12345.dddd.cccc  12345
1    B        ccc2222.ddd.aaa.ho16589.ddd  16589
2    C               ddd16893.aaa.de59875  59875
3    D           aaa15875.ccc.ddd.ho13532  13532

关于Python 提取某些字符串后的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969512/

相关文章:

python - 计算Python中另一个数据帧中每组数据帧中具有特定模式的元素数量

Python Flask,使用重新加载器重新启动 : What does that mean

javascript - 将字符串转换为格式不正确的 JS 对象

python - 如何访问我无法在链式操作中访问其名称的列

python - 将 Pandas DataFrame 中的行对齐到每列的最大值

python - 可以使用 cx_freeze 在 mac os x 中卡住 python3.1 脚本吗?

python - 在 Python 中从序列中删除项目的优雅方法?

Python 逻辑运算符正则表达式

python - 试图在 python 中捕获一个大的多行 block

python - 当两列相似时替换它们