【问题标题】:is there any method or function to extract only URL's from a dataframe column是否有任何方法或函数可以从数据框列中仅提取 URL
【发布时间】:2020-12-10 17:26:34
【问题描述】:

我有一个数据框,其中包含一个列名称作为回复,其中包含以下内容

ljaganathan:https://engineering.paypalcorp.com/confluence/pages/viewpage.action?spaceKey=CAL&title=Report+REST+Interface vanbalagan:请参考:https://engineering.paypalcorp.com/confluence/display/GPS/User+Guide+for+Self-serve+Alerts

我只想从只有 URL 的特定列中提取 URL 尝试使用以下代码

   import re 
   re.findall(r'(https?://\S+)', df['replies'])

收到此错误 TypeError:预期的字符串或类似字节的对象

甚至尝试过这个

df["replies"]=df["replies"].astype(str)
pattern = r'(https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}[-a-zA-Z0-9()@:%_+.~#?&/=]*)'

df['links'] = ''
df['links']= df["replies"].str.extract(pattern, expand=True)

print(df['links')

获取上述的 NaN 值

有人可以帮我解决上述问题吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您的正则表达式不正确。你可以试试:

    import re 
    re.findall('(https?:\/\/\S+)', df['replies'])
    

    或您的第二个版本:

    df["replies"]=df["replies"].astype(str)
    pattern = '(https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}[-a-zA-Z0-9()@:%_+.~#?&\/=]*)'
    
    df['links'] = ''
    df['links']= df["replies"].str.extract(pattern, expand=True)
    
    print(df['links')
    

    有在线测试器可以测试你的正则表达式,对调试非常有用,比如regex101.com

    【讨论】:

    • 我可以用第二个来做到这一点.. 但是第一个确实得到了同样的错误。这是 TypeError: expected string or bytes-like object 感谢:@Niels Henkens
    • 还是不明白为什么我不能用 re.findall 做到这一点
    • 如果我只需要提取那些包含 confluence 的 URL,那么......我需要做些什么改变
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2018-06-09
    • 2012-07-04
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多