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