在pandas datafram中解析/拆分url的python方法

2024-09-29 21:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,在一个标有url的列中,有数千个类似于下面这些链接的用户:

https://www.google.com/something
https://mail.google.com/anohtersomething
https://calendar.google.com/somethingelse
https://www.amazon.com/yetanotherthing

我有以下代码:

^{pr2}$

代码能够正确地解析和分割url,但是由于我要遍历df的每一行,所以速度很慢。有没有更有效的方法来解析网址?在


Tags: 代码用户httpscomurlamazondf链接
2条回答

我认为当您写回df时,会发生太多的查找。看起来每个df.loc[row_index, ...]需要检查的行数与URL的总数(大小为df.url)相同。这意味着,首先至少要查看所有行一次以找到唯一的url,然后对于每个url,您都要再次查找匹配的行,然后再对每次写入进行一次。因此,假设unique只进行一次完整扫描,则平均扫描1+N+(5N/2)次。你真的只需要一次。在

除非有大量的重复,否则可以忽略重复项,逐行遍历df,并确保每次迭代都使用整数索引。(.iloc)如果不在行中存储其他数据,也可以一次分配所有字段:

df.iloc[idx] = {'protocol': ..., 'domain': ..., ...}

您可以使用^{}在一行中完成相同的操作:

df['protocol'],df['domain'],df['path'],df['query'],df['fragment'] = zip(*df['url'].map(urlparse.urlsplit))

使用timeit,当在186个url上运行时,它在每个循环2.31 ms中运行,而不是像原来的方法那样在每个循环中179 ms。(但是请注意,代码没有针对重复项进行优化,它将多次通过urlparse运行相同的url。)

完整代码:

^{pr2}$

相关问题 更多 >

    热门问题