我有一个如下所示的数据框
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/