Pandas str.replace with regex doubles results?[duplicate]

qvsjd97n  于 2023-11-15  发布在  其他
关注(0)|答案(2)|浏览(66)

此问题在此处已有答案

re.sub(".*", ", "(replacement)", "text") doubles replacement on Python 3.7(2个答案)
Why do some regex engines match .* twice in a single input string?(1个回答)
16天前关闭
假设我有这个Pandas系列:

$ python3 -c 'import pandas as pd; print(pd.Series(["1","2","3","4"]))'
0    1
1    2
2    3
3    4
dtype: object

字符串
我想“ Package ”字符串“1”,“2”,“3”,“4”,使它们以“a”为前缀,以“B”为后缀->也就是说,我想得到“a1 B”,“a2 B”,“a3 B”,“a4 B”。所以我尝试https://pandas.pydata.org/docs/reference/api/pandas.Series.str.replace.html

$ python3 -c 'import pandas as pd; print(pd.Series(["1","2","3","4"]).str.replace("(.*)", r"a\1b", regex=True))'
0    a1bab
1    a2bab
2    a3bab
3    a4bab
dtype: object


所以-我确实把“1”“包裹”到“a1 b”->中,但是“ab”又重复了一次?
(在regex101.com中尝试这个正则表达式,我注意到如果启用了g标志,我会在末尾得到“ab”的相同“ghost副本”;所以也许Pandas .str.replace以某种方式启用了它?但是,根据文档,Pandas .str.replace的默认值是flags=0?!)
如何让列单元格的全部内容只“ Package ”在我想要的字符中?

hjzp0vay

hjzp0vay1#

(.*)更改为(.+)

andrej@Andrej-PC:~/app$ python3 -c 'import pandas as pd; print(pd.Series(["1","2","3","4"]).str.replace("(.+)", r"a\1b", regex=True))'
0    a1b
1    a2b
2    a3b
3    a4b
dtype: object

字符串

nhhxz33t

nhhxz33t2#

一个可能的解决方案:

s = pd.Series(range(1,5))
'a' + s.astype(str) + 'b'

字符串
输出量:

0    a1b
1    a2b
2    a3b
3    a4b
dtype: object

相关问题