在 pandas 数据框中解析/分割 URL 的 pythonic 方法

2024-02-08

我有一个 df,它在标记为 url 的列中为不同的用户提供了数千个链接,如下所示:

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

我有以下代码:

import urlparse

df['domain'] = ''
df['protocol'] = ''
df['domain'] = ''
df['path'] = ''
df['query'] = ''
df['fragment'] = ''
unique_urls = df.url.unique()
l = len(unique_urls)
i=0
for url in unique_urls:
    i+=1
    print "\r%d / %d" %(i, l),
    split = urlparse.urlsplit(url)
    row_index = df.url == url
    df.loc[row_index, 'protocol'] = split.scheme
    df.loc[row_index, 'domain'] = split.netloc
    df.loc[row_index, 'path'] = split.path
    df.loc[row_index, 'query'] = split.query
    df.loc[row_index, 'fragment'] = split.fragment

该代码能够正确解析和分割 url,但速度很慢,因为我正在迭代 df.txt 的每一行。有没有更有效的方法来解析 URL?


您可以使用Series.map http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.Series.map.html#pandas.Series.map在一行中完成相同的任务:

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

使用 timeit,这运行在2.31 ms每个循环而不是179 ms当在 186 个 url 上运行时,每个循环与原始方法中一样。 (但请注意,代码未针对重复进行优化,并且将通过 urlparse 多次运行相同的 url。)

完整代码:

import pandas

urls = ['https://www.google.com/something','https://mail.google.com/anohtersomething','https://www.amazon.com/yetanotherthing'] # tested with list of 186 urls instead
df['protocol'],df['domain'],df['path'],df['query'],df['fragment'] = zip(*df['url'].map(urlparse.urlsplit))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 pandas 数据框中解析/分割 URL 的 pythonic 方法 的相关文章

随机推荐

  • react-hook-form:使用 onBlur 模式时验证不起作用

    我正在尝试显示错误yup and react hook form当用户选择超过 5 个复选框但未成功时 相反 当选择第七个复选框时会显示错误 这是简化的代码 imports const schema yup object shape opt
  • 需要有关必须显示 250 000 条折线的 Google 地图应用程序的指导

    我正在为我正在开发的使用 Google 地图的应用程序寻求建议 Summary 用户具有用于搜索满足条件的街道段的条件列表 街道段将用 3 种颜色来表示 分别是低于平均水平 平均水平和高于平均水平 然后 用户单击街道路段 查看一个信息窗口
  • 如何在android中垂直均匀分布按钮/布局?

    我有一个类似于计算器的布局 每行 4 个按钮 大约有 5 行 我使用以下方法创建了每一行LinearLayout 我已经成功地通过使用完全填充了每行的宽度android layout weight 1 在每个按钮中LinearLayout
  • Flexbox:重新排序和堆叠列

    我有三列 我想在特定的屏幕尺寸下交换它们的顺序 当前的顺序是两个 1 4 宽度的列 中间有 1 2 宽度 我想将两个1 4宽度的列变成1 2宽度 并在开始时将它们堆叠起来 我可以使用浮动来复制它 但无法找到使用弹性盒的方法 我正在努力让两个
  • 替换无序列表中的值(html)+ JQuery

    D1 nav d1 span text X1 会改变 span D1 span to span X1 span
  • 通过触摸停止和启动动画。目标C

    我制作了一个在屏幕上移动的动画 我的动画连续循环 如何在点击动画图像时停止动画 然后在松开触摸时让动画继续 我知道如何使用 TouchesMoved 来移动指定的按钮 如下所示 CGPoint point event allTouches
  • virtualenv激活后“python”仍然运行系统版本

    我使用以下命令安装了 Python 2 7 configure prefix usr local enable unicode ucs4 enable shared LDFLAGS Wl rpath usr local lib make m
  • Jupyter Lab 中的 pycwt 包出现 ModuleNotFoundError

    我有一个conda环境 我已经安装了wavelet包pycwt https pypi org project pycwt using conda install n myenv c conda forge pycwt 按照规定蟒蛇云 htt
  • ng2-文件上传访问控制来源问题

    我已经使用这个库进行 angular2 文件上传https github com valor software ng2 file upload https github com valor software ng2 file upload
  • 无法编译调用 tgkill 的程序

    我正在尝试编写一个使用 tgkill 向特定线程发送信号的程序 但是每当我用 gcc 编译它时 我都会收到有关 tgkill 未定义引用的错误 我尝试使用 lpthread 进行编译 但没有帮助 我用谷歌搜索了又搜索 但找不到任何答案 我如
  • .NET Excel 文件解析器

    因此 我工作的公司正在寻找一种方法来验证给定的 xls xlsx 文件是否有效 这意味着检查列 行和其他数据 他让我评估 GrapeCity Spread 和 SpreadsheetGear 但我想知道是否还有其他人可以查看其他外部工具的建
  • 如何解析flutter中的map Json列表?

    I have one Json structure with three maps one is list of products then total and tax I have to parse this json structure
  • 如何知道 npm `unzip` 模块何时完成解压文件?

    我正在使用unzip来自 npm 的模块用于提取 zip 存档的内容 我需要知道何时完成提取并且文件已完全写入磁盘 My code fs createReadStream master zip pipe unzip Extract path
  • C++ 中用于分离标头/源的模板专业化的稳健方法是什么

    在中等规模甚至大型复杂项目中 将模板声明和定义分开是有用的 以减少编译时间 然而 在复杂的代码中 程序员的小错误可能会导致不被注意的行为变化 例如调用通用版本而不是专门化版本 例子 由于错过了声明 模板专业化变得不可见 file A hpp
  • 如何将 Emacs 与 Python 结合使用

    我是 emacs 新手 我想使用 emacs 进行 python 开发 我使用的是 Ubuntu 9 10 我对让 emacs 与 python 一起工作感到沮丧 我使用 GNU Emacs 23 1 50 1 x86 64 pc linu
  • 以渐变方式绘制背景颜色

    此代码生成下面的第一个图 water height lt seq 0 5 1 y lt seq 0 1500 length out 6 df lt data frame water height y library ggplot2 ggpl
  • vb.net 中可以实现内联函数吗?

    问题在标题中 我看到的答案假设您正在谈论编译或 JIT 时内联 它们是完全正确的 然而 我听说过的 内联 一词的另一种用法是用于 lambda 表达式之类的东西 在 C 中 例如 public IEnumerable
  • 在 Android 上安装预构建的二进制文件:“未找到”

    我正在尝试在自定义 Android 映像中安装预构建的二进制文件 为此 我已将其复制到新目录中prebuilt android arm 与Android mk文件类似于此 LOCAL PATH call my dir include CLE
  • 进程地址空间与虚拟内存

    根据我阅读几篇文章的理解 我假设进程地址空间 PAS 和虚拟内存 VM 是相同的 难道是我的理解有问题 有人可以解释一下这一点并启发我吗 我很困惑 我知道进程地址空间与 RAM 或物理内存无关 但只是对 PAS 和 VM 感到困惑 Firs
  • 在 pandas 数据框中解析/分割 URL 的 pythonic 方法

    我有一个 df 它在标记为 url 的列中为不同的用户提供了数千个链接 如下所示 https www google com something https mail google com anohtersomething https cal