如何解决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 举报,一经查实,本站将立刻删除。