Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不同情况下使用正则表达式修改pandas中的字符串_Python_Regex_Pandas_String_Replace - Fatal编程技术网

Python 如何在不同情况下使用正则表达式修改pandas中的字符串

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结尾

我有以下称为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结尾,
无所事事
案例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替换