Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一种快速计算降价链接数的方法_Python_Regex_Pandas - Fatal编程技术网

Python 一种快速计算降价链接数的方法

Python 一种快速计算降价链接数的方法,python,regex,pandas,Python,Regex,Pandas,我有一个包含reddit注释的数据框df。每个评论可能包含许多降价链接。比如说, '[a](https://www.google.com/) bcd [e](https://pandas.pydata.org/)' 我想计算这样的链接。我的方法是df['comment'].str.count('\[(?P[^\]+)\]\(?P[^\]]+)\) 因为我的数据帧包含超过400万行,我想问一下是否有可能更快的方法来实现这一点。非常感谢你 import pandas as pd d = {'col

我有一个包含reddit注释的数据框
df
。每个评论可能包含许多降价链接。比如说,

'[a](https://www.google.com/) bcd [e](https://pandas.pydata.org/)'
我想计算这样的链接。我的方法是
df['comment'].str.count('\[(?P[^\]+)\]\(?P[^\]]+)\)

因为我的数据帧包含超过400万行,我想问一下是否有可能更快的方法来实现这一点。非常感谢你

import pandas as pd
d = {'col1': [1, 2],
     'comment': ['[a](https://www.google.com/) bcd [e](https://pandas.pydata.org/)',
                 '[f](https://www.google.com.vn/) bcd [g](https://pandas.pydata.org/)'
                ]
    }
df = pd.DataFrame(data = d)
df['comment'].str.count('\[(?P<txt>[^\]]+)\]\((?P<lnk>[^\)]+)\)')
将熊猫作为pd导入
d={'col1':[1,2],
'评论':['[a](https://www.google.com/)bcd[e](https://pandas.pydata.org/)',
“[f](https://www.google.com.vn/)卡介苗[g](https://pandas.pydata.org/)'
]
}
df=pd.DataFrame(数据=d)
df['comment'].str.count('\[(?P[^\]]+)\]\\(?P[^\]]+)\))

为了提高性能,我会放弃捕获组

但是,正如OP在评论中所说的,首先需要捕获gropup。因此,我在这里看到两种方法:

  • 删除不必要的捕获组并可以选择删除命名组:
  • 然后,replacment模式应为
    \1
    (仅为组参考)

  • 使用前瞻并仅捕获所需文本:

  • 你目前需要多长时间?你找过了吗?你发现了什么?我认为你可以通过简化它来稍微提高模式性能:
    \[^\]+\]\([^\]]+\)
    ,除此之外,我认为它没有比这更好的了。@MichałTurczyn我用
    从链接中提取文本。replace('\[(?P[^\]+)\]\]\]\\\(?P[^\]+)\),'\g')
    。在我看来,通过与您的
    \[^\]+\]\\\([^\]]+\)
    相结合,此提取可以稍微快一点。你能为这个提取调整它吗?好的,你只需要一个组,所以我会放弃另一个,仍然应该有轻微的性能提升:
    \[(?P[^\]+)\]\]\([^\]+\)
    让我知道它是否更快:)你认为它有多快?根据哪项测试得出的结论更快?@user12750353消除复杂性总是获得性能。此外,OP测试itI在这里测试,但匹配时仅减少10%,这就是我问的原因。
    \[([^\]]+)\]\([^\)]+\)
    
    \[[^\]]+\](?=\([^\)]+\))