Pandas Python:切片 /变换URL以获取项目和项目计数



如果我有列数据,例如100个条目以两种格式下降;在"列名" URL下:

http//mysportswebsite.com/shop/?Baseball+Bat=5
http//memoribilia.com/checkout?autograph=1

如何提取商品和数字?

理想情况下,我想在此示例棒球棒和亲笔签名中添加新列(如果它们还不存在),然后将相应的5和1的计数添加到其列中(或者,如果它们是从一个出发的,则只需添加到列中先前的示例),从此数据推断购买计数。

我想对Python的整个URL列进行此操作

对于这个问题(我的信息有限),我会建议:

如果您的DF看起来像这样:

df = pd.DataFrame(data={"url": ["http//mysportswebsite.com/shop/?Baseball+Bat=5", "http//memoribilia.com/checkout?autograph=1"]})
                                              url
0  http//mysportswebsite.com/shop/?Baseball+Bat=5
1      http//memoribilia.com/checkout?autograph=1

您可以这样做:

df['product_count_tuple'] = df.url.apply(lambda x: x.split('?')[1].split('='))
df['product'] = df.product_count_tuple.apply(lambda x: x[0].replace('+', ' '))
df['count'] = df.product_count_tuple.apply(lambda x: x[1])
df = df.drop('product_count_tuple', 1)

导致:

                                              url       product count
0  http//mysportswebsite.com/shop/?Baseball+Bat=5  Baseball Bat     5
1      http//memoribilia.com/checkout?autograph=1     autograph     1

python已经有库来解析URL。

>>> import urllib.parse as urlparse
>>> url = 'http//mysportswebsite.com/shop/?Baseball+Bat=5'
>>> parsed_url = urlparse.urlparse(url)
>>> params = urlparse.parse_qs(parsed_url.query)
>>> print(params)
{'Baseball Bat': ['5']}

这是re模块的另一种方法:

import re
df['item'] = df['URL'].apply(lambda x: (re.findall('?(.*)=', x)[0]).replace('+', ' '))
df['count'] = df['URL'].apply(lambda x: int((re.findall('=(.*)', x)[0])))

在纯python中,做到这一点的一种方法是将字符串分配为'?',取第二个组件,然后在'='。

上再次分配
url = 'http://mysportswebsite.com/shop/?Baseball+Bat=5'
item, count = url.split('?')[1].split('=')

您可以使用apply通过列运行此操作,但是,如果您有大量URL,则将内置的字符串方法用于同一操作更有效。语法非常相似。

data = pd.Series([
    'http://mysportswebsite.com/shop/?Baseball+Bat=5',
    'http//memoribilia.com/checkout?autograph=1'])
df = data.str.split('?', expand=True)[1].str.split('=', expand=True)
df.columns = ['item', 'count']

最新更新