如何在熊猫数据框+ python的一列中的<>之间找到多个子字符串
Posted
技术标签:
【中文标题】如何在熊猫数据框+ python的一列中的<>之间找到多个子字符串【英文标题】:How to find multiple substrings between <> in one column in pandas data frame + python 【发布时间】:2019-12-16 19:47:25 【问题描述】:我正在使用 Pandas 和 Python。我的数据是:
a=pd.DataFrame('ID':[1,2,3,4,5],
'Str':['aa <aafae><afre> ht4',
'v fef <><433>',
'<1234334> <a>',
'<bijf> 04<9tu0>q4g <vie>',
'aaa 1'])
我想提取 之间的所有子字符串并将它们与空白合并。比如上面的例子应该有结果:
aafae afre
433
1234334 a
bijf 9tu0 vie
nan
所以之间的所有子字符串都被提取出来了。如果没有这样的字符串,就会有 nan 。我已经尝试过 re library 和 str 函数。但我对正则表达式真的很陌生。谁能帮帮我。
【问题讨论】:
【参考方案1】:使用pandas.Series.str.findall
:
a['Str'].str.findall('<(.*?)>').apply(' '.join)
输出:
0 aafae afre
1 433
2 1234334 a
3 bijf 9tu0 vie
4
Name: Str, dtype: object
【讨论】:
非常感谢。您能否也解释一下为什么我们必须放 ?后 。* ?我没有这样做。然后我只能找到最后一个>,而不是紧接着的下一个。 @FengChen?
用于使正则表达式非贪婪:一旦找到它要查找的内容就会停止,而不是一直持续到最后一场比赛。也许***.com/questions/2824302/… 会更好地指导您了解它的作用。【参考方案2】:
也许,这个表达在某种程度上可能会起作用:
import pandas as pd
a=pd.DataFrame('ID':[1,2,3,4,5],
'Str':['aa <aafae><afre> ht4',
'v fef <><433>',
'<1234334> <a>',
'<bijf> 04<9tu0>q4g <vie>',
'aaa 1'])
a["new_str"]=a["Str"].str.replace(r'.*?<([^>]+)>|(?:.+)', r'\1 ',regex=True)
print(a)
【讨论】:
以上是关于如何在熊猫数据框+ python的一列中的<>之间找到多个子字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?