代码之家  ›  专栏  ›  技术社区  ›  sdbbs

用正则表达式替换Pandas str.replace会使结果加倍吗?[副本]

  •  1
  • sdbbs  · 技术社区  · 1 年前

    假设我有这个熊猫系列:

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

    我想“包装”字符串“1”、“2”、“3”、“4”,使它们以“a”为前缀,以“b”为后缀->也就是说,我想要得到“a1b”,“a2b”,”a3b“,”a4b“。所以我试着 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”“包装”成了“a1b”->但是“ab”又重复了一次?

    (在regex101.com中尝试这个regex,我注意到如果 g 标志已启用;也许熊猫 .str.replace 以某种方式启用它?但是,默认情况是 flags=0 大熊猫 .str.replace 根据文档?!)

    如何将列单元格的全部内容“包装”在我想要的字符中?

    2 回复  |  直到 1 年前
        1
  •  2
  •   Andrej Kesely    1 年前

    改变 (.*) (.+) :

    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
    
        2
  •  1
  •   PaulS    1 年前

    可能的解决方案:

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

    输出:

    0    a1b
    1    a2b
    2    a3b
    3    a4b
    dtype: object