【问题标题】:Python Extract numbers after certain stringsPython在某些字符串后提取数字
【发布时间】:2019-11-21 07:31:59
【问题描述】:

我的数据框如下所示

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})

万分感谢!!!!

【问题讨论】:

    标签: python regex pandas data-manipulation


    【解决方案1】:

    使用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
    

    【讨论】:

    • 您还需要从 URL 中删除数字
    • 删除号码?你什么意思?
    • 生成的数据框应该有没有附加数字的 URL,除了 id(我猜)...所以,应该是 aaa.bbb3333.ccc.de12345.dddd.cccc,而不是 aaa.bbb.ccc.de12345.dddd.cccc
    • 是的,你是对的......但是他/她所期望的结果没有这些数字......无论如何,干得好:)
    • 对不起,伙计们。那是个错误。我忘记在 URL 中输入数字。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多