考虑一下这个简单的设置
import pandas as pd
df = pd.DataFrame({'id' : [1,2,3],
'text' : ['stack-overflow',
'slack-overflow',
'smack-over']})
df
Out[9]:
id text
0 1 stack-overflow
1 2 slack-overflow
2 3 smack-over我有一个给定的正则表达式,我想提取最长的匹配。我知道我可以使用str.extractall来获取所有的匹配,但是如何有效地获得最长的匹配(作为dataframe中的列df['mylongest'] )?
当然,在这个例子中最长的匹配是溢出、溢出和smack。
df.text.str.findall(r'(\w+)')
Out[10]:
0 [stack, overflow]
1 [slack, overflow]
2 [smack, over]
Name: text, dtype: object发布于 2019-04-07 23:07:03
让我们将max映射到str.findall的结果。我使用functools.partial来避免lambdas。
from functools import partial
f = partial(max, key=len)
df['text'].str.findall(r'(\w+)').map(f)
0 overflow
1 overflow
2 smack
Name: text, dtype: object发布于 2019-04-07 23:47:18
如果您想在pandas中尝试一些东西
s=df.text.str.extractall(r'(\w+)')[0]
s[s.str.len().eq(s.str.len().max(level=0),level=0)]
Out[51]:
match
0 1 overflow
1 1 overflow
2 0 smack
Name: 0, dtype: objecthttps://stackoverflow.com/questions/55564428
复制相似问题