当前位置: 首页 > 知识库问答 >
问题:

熊猫的功能耗时太长

闻人飞白
2023-03-14

我试图提取顶级URL并忽略路径。我使用的代码如下:

for row in Mexico['Page URL']:
    parsed_uri = urlparse( 'http://www.one.com.mx/furl/Conteúdo Raiz/Meu' )
    Mexico['SubDomain'] = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)

这个脚本已经运行了一个小时了。当我运行它时,它给出了以下警告:

/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  This is separate from the ipykernel package so we can avoid doing imports until

如果有人能给我一个更快的建议,我将不胜感激,也许是“警告”建议的方法

共有1个答案

太叔繁
2023-03-14

如果序列很长,则为序列的每一行调用一次Python函数可能会非常慢。加快这一速度的关键是将多个函数调用替换为(理想情况下)一个矢量化函数调用。

当使用Pandas时,这意味着根据矢量化的字符串函数重写Python函数(例如urlparse)。

由于urlparse是一个相当复杂的函数,因此重写urlparse将非常困难。但是,在您的情况下,我们有一个优势,就是知道我们关心的所有URL都以https://http://开头。因此,我们不需要urlparse的全面通用性。我们也许可以使用一个更简单的规则:netloc是https://http://后面的任何字符,直到字符串结束或下一个/,以先到者为准。如果这是真的,那么

Mexico['Page URL'].str.extract('(https?://[^/]+)', expand=False)

可以从整个系列Mexico['Page URL']中提取所有netloc,无需循环,也无需多次urlparse函数调用。当len(墨西哥)较大时,这将快得多。

例如

import pandas as pd

Mexico = pd.DataFrame({'Page URL':['http://www.one.com.mx/furl/Conteúdo Raiz/Meu',
                                   'https://www.one.com.mx/furl/Conteúdo Raiz/Meu']})

Mexico['SubDomain'] = Mexico['Page URL'].str.extract('(https?://[^/]+)', expand=False)
print(Mexico)

产量

                                        Page URL               SubDomain
0   http://www.one.com.mx/furl/Conteúdo Raiz/Meu   http://www.one.com.mx
1  https://www.one.com.mx/furl/Conteúdo Raiz/Meu  https://www.one.com.mx
 类似资料:
  • 问题内容: 我的数据有年龄,还有每月付款。 我正在尝试汇总付款总额,但不汇总年龄(平均有效)。 是否可以对不同的列使用不同的功能? 问题答案: 您可以将列名作为键,将想要的函数作为值传递给字典。

  • 我正在尝试编写一个函数,如果< code > selection _ Match = = ' No Match ' then < code > DNB = score _ difference 0.02 然而,我返回相同的df,没有任何修改 虽然它应该回来 Lorem ipsum dolor sit amet,consecetur adipiscing elit,sed do eiusmod te

  • 问题内容: Pandas确实很棒,但令我惊讶的是,从Pandas.DataFrame检索值的效率低下。在下面的玩具示例中,即使DataFrame.iloc方法也比字典慢100倍以上。 问题:这里的教训仅仅是字典是查找价值的更好方法吗?是的,我知道那正是他们的目的。但是我只是想知道是否缺少有关DataFrame查找性能的信息。 我意识到这个问题比“提问”更“有趣”,但是我会接受一个提供洞察力或观点的

  • 问题内容: 对于较大的数据帧(大约1到300万行),应用功能似乎工作非常缓慢。 对于我的情况,我有两种与apply函数有关的任务。 首先:应用查询字典查询 第二:与groupby一起申请 我想对于第一种情况,它可以通过数据框联接来完成,而我不确定大型数据集上这种联接的资源成本。 我的问题是: 在上述两种情况下,有什么替代方法可以适用吗? 为什么申请这么慢?对于dict查找情况,我认为应该为O(N)

  • 从该数据帧开始: 有一些缺失的值。我试图以行方式应用替换函数,例如在伪代码中: 我知道我可以做一些事情,比如: 函数定义如下: 获得: 但是先验地,我不知道字符串在列中的实际位置,所以我必须使用类似于的方法进行搜索,但要按行搜索。 编辑:每个字符串都可以出现在列中的任何位置。

  • 所以我有一些代码,我在我的主线程中创建了6个线程,它们运行一些代码。我启动线程。然后我在线程上调用,以便主线程在继续执行之前等待它们全部死亡。 现在,我正在使用一些非常基本而且很可能不准确的方法来衡量代码运行的时间。只需调用以获取开始和结束时的系统时间,然后打印差异。 比方说,运行我的所有代码大约需要500毫秒。 我决定删除每个线程对的调用,而是让我的主线程睡眠20毫秒。这导致我的代码在大约200