首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清理熊猫数据栏中的URL列

清理熊猫数据栏中的URL列
EN

Stack Overflow用户
提问于 2016-12-14 11:19:01
回答 2查看 2.4K关注 0票数 3

我有csv (或dataframe)的内容如下:

代码语言:javascript
运行
复制
date          | URLs                                         | Count
-----------------------------------------------------------------------
17-mar-2014   | www.example.com/abcdef&=randstring           | 20
10-mar-2016   | www.example.com/xyzabc                       | 12
14-apr-2015   | www.example.com/abcdef                       | 11
12-mar-2016   | www.example.com/abcdef/randstring            | 30
15-mar-2016   | www.example.com/abcdef                       | 10
17-feb-2016   | www.example.com/xyzabc&=randstring           | 15
17-mar-2016   | www.example.com/abcdef&=someotherrandstring  | 12

我想清除列'URLs‘,其中我想将所有行的www.example.com/abcdef&=randstringwww.example.com/abcdef/randstring转换为www.example.com/abcdef等等。

我试着使用urlparse库,并解析URL,将urlparse(url).netlocurlparse结合起来。但是,由于每个URL都会导致完全不同的路径/查询/params,所以它被调整为效率低下。

有什么工作可以利用熊猫吗?如有任何提示或建议,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-14 11:37:56

我认为它与regex的关系比熊猫更多,尝试使用pandas.apply来更改一个列。

代码语言:javascript
运行
复制
import pandas as pd
import re

def clear_url(origin_url):
    p = re.compile('(www.example.com/[a-zA-Z]*)')
    r = p.search(origin_url)
    if r:
        return r.groups(1)[0]
    else:
        return origin_url


d = [
    {'id':1, 'url':'www.example.com/abcdef&=randstring'},
    {'id':2, 'url':'www.example.com/abcdef'},
    {'id':3, 'url':'www.example.com/xyzabc&=randstring'}
]
df = pd.DataFrame(d)

print 'origin_df'
print df

df['url'] = df['url'].apply(clear_url)
print 'new_df'
print df

输出:

代码语言:javascript
运行
复制
origin_df
id                                 url
0   1  www.example.com/abcdef&=randstring
1   2              www.example.com/abcdef
2   3  www.example.com/xyzabc&=randstring
new_df
id                     url
0   1  www.example.com/abcdef
1   2  www.example.com/abcdef
2   3  www.example.com/xyzabc
票数 3
EN

Stack Overflow用户

发布于 2016-12-14 11:28:08

我认为您可以使用extract by regex - filter由a-zA-Zwww.com之间创建的所有字符串,以及另一个以/开头的字符串。

代码语言:javascript
运行
复制
print (df.URLs.str.extract('(www.[a-zA-Z]*.com/[a-zA-Z]*)', expand=False))
0    www.example.com/abcdef
1    www.example.com/xyzabc
2    www.example.com/abcdef
3    www.example.com/abcdef
4    www.example.com/abcdef
5    www.example.com/xyzabc
6    www.example.com/abcdef
Name: URLs, dtype: object
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41141265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档