如何在熊猫数据框+ 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中熊猫数据框特定列中的所有行?

如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?

如何在熊猫数据框中的所有列中搜索模式,并在找到时将其复制到另一列

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

如何根据另一列设置熊猫数据框背景颜色

做某事。如果在熊猫数据框中列中的值等于 1