微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python:在大熊猫的每一行中用大括号替换尖括号和它的字符串

如何解决Python:在大熊猫的每一行中用大括号替换尖括号和它的字符串

这引用了this SO thread

为了新颖起见,我以很小的更改来再现数据帧:

ID         Static_Text                                           Params
1      Today,<adj1> is quite Sunny. Tomorrow,<adj2>           1-10-2020  
       may be little <adj3>
1      Today,<adj2>           2-10-2020
       may be little <adj3>
1      Today,<adj2>           Cloudy
       may be little <adj3>
2      Let's have a coffee break near <adj1>,if I              Balcony
       don't get any SO reply by <adj2>
2      Let's have a coffee break near <adj1>,if I               30
       don't get any SO reply by <adj2> mins

现在,我想用<adj>替换整个{},其中第一次出现的<adj1>应该替换为{0}。因此,结果数据帧将如下所示:

ID         Static_Text                                           Params
1      Today,{0} is quite Sunny. Tomorrow,{1}              1-10-2020  
       may be little {2}
1      Today,{1}              2-10-2020
       may be little {2}
1      Today,{1}              Cloudy
       may be little {2}
2      Let's have a coffee break near {0},if I              Balcony
       don't get any SO reply by {1}
2      Let's have a coffee break near {0},if I              30
       don't get any SO reply by {1} mins 

我正在尝试以下操作:

def replace_angular(df):
   if '<' and '>' in df['Static_Text']:
       rep_txt = re.sub(r'\<[^>]*\>',{},df[Static_Text'])
   return rep_txt

df = df.apply(lambda x : replace_angular(x),axis=1)

但是我不太确定上面的代码片段。尤其是如何在{}中引入0,1等。

解决方法

IIUC,您可以在lambda中传递一个str.replace函数作为替换:

df["Static_Text"].str.replace(r"<[A-Za-z]+(\d+)>",lambda m: '{'+f'{int(m.group(1))-1}'+'}')

0                     Today,{0} is quite Sunny. Tomorrow,{1} may be little {2}
1                     Today,{1} may be little {2}
2                     Today,{1} may be little {2}
3         Let's have a coffee break near {0},if I don't get any SO reply by {1}
4    Let's have a coffee break near {0},if I don't get any SO reply by {1} mins
,

如果adj中的数字超过9,则应将“ m.group(0)[-2]”更改为“ m.group(0)[4:-1]”。

print (df["Static_Text"].str.replace(r"<adj(\d)>",lambda m: "{"+f"{int(m.group(0)[4:-1])-1}"+"}"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。