Python 如何在不同情况下使用正则表达式修改pandas中的字符串
我有以下称为df的数据帧:Python 如何在不同情况下使用正则表达式修改pandas中的字符串,python,regex,pandas,string,replace,Python,Regex,Pandas,String,Replace,我有以下称为df的数据帧: Symbol Country Type etc... 0 AG.L UK OS 1 UZ. UK OS 2 DT UK OS 3 XX.L US OS 4 MSFT US OS 5 AAPL US OS 6 DB.S SG OS 我想在框架上执行以下操作。其中国家==“英国” 可能有3种情况 案例1:以.L结尾
Symbol Country Type etc...
0 AG.L UK OS
1 UZ. UK OS
2 DT UK OS
3 XX.L US OS
4 MSFT US OS
5 AAPL US OS
6 DB.S SG OS
我想在框架上执行以下操作。其中国家==“英国”
可能有3种情况
案例1:以.L结尾,
无所事事
案例2:以。,
在末尾加上“L”
案例3:两者都没有结束。或者,我,
在末尾添加“.L”
只要国家==“UK”,我希望它以“.L”结尾
所以应该是这样的
Symbol Country Type etc...
0 AG.L UK OS
1 UZ.L UK OS
2 DT.L UK OS
3 XX.L US OS
4 MSFT US OS
5 AAPL US OS
6 DB.S SG OS
我使用以下代码
df.loc[df['Country'].eq('UK'),'Symbol'] = df.loc[df['Country'].eq('UK'),'Symbol'].str.replace(r'\.', '.L').str.replace(r'[a-z]$', '.L')
但我明白了
AG.LL
UZ.L
DT
正确的方法是什么?您几乎做对了,但是您在替换圆点时错过了美元符号,而另一个符号必须略有不同,因此请尝试:
df.loc[df['Country'].eq('UK'),'Symbol'] = df.loc[df['Country'].eq('UK'),'Symbol'].str.replace(r'^([A-Z]+)$', r'\1.L').str.replace(r'\.$', '.L')
在我的Python shell中,它输出:
0 AG.L
1 UZ.L
2 DT.L
Name: Symbol, dtype: object
在python中是否可以将“([^L])$”替换为$1L?因此,如果最后一个字符不是L,则在其上添加一个L。我不知道python中捕获组和反向引用的确切语法。你必须自己找出答案。DB.S不会受到影响,因为它不在英国。对不起,我的编辑使你的评论过时了。关于DB.S,你是对的,它不在英国,但它是一个正在被替换的bug。如果你用L替换所有的周期,这将对中间符号的英国符号产生影响。这就是AG.LL的原因:句号被.L替换