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

熊猫数据帧。用regex字典替换不工作,还是我犯了一些错误?

  •  0
  • Kartik  · 技术社区  · 6 年前

    对于pandas 0.19.2,python 3.6.0 dataframe.replace与dictionary一起作用于子字符串(如“find”),series.replace也一样。pandas 0.24.0 python 3.6.8似乎作用于数据帧的整个字符串(类似于“match”),并且仍然作用于序列的子字符串(类似于“find”)。

    df = pd.DataFrame({'c1':['AD','BD'],'c2':['AD','BD']})
    print(df)
    print(df.replace(to_replace={'c1':{r'D': ''}, 'c2':{r'BD': ''}},regex=True))
    print(df.replace(to_replace={r'D': ''},regex=True))
    print(df['c1'].replace(to_replace=r'D', value='',regex=True))
    

    pandas 0.19.2生成(为了易读性,我添加了一些空白行):

       c1  c2
    0  AD  AD
    1  BD  BD
    
      c1  c2
    0  A  AD
    1  B    
    
      c1 c2
    0  A  A
    1  B  B
    
    0    A
    1    B
    Name: c1, dtype: object
    

    大熊猫0.24.0:

       c1  c2
    0  AD  AD
    1  BD  BD
    
       c1  c2
    0  AD  AD
    1  BD    
    
       c1  c2
    0  AD  AD
    1  BD  BD
    
    0    A
    1    B
    Name: c1, dtype: object
    

    在我看来像熊猫虫,还是我错过了什么?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    6 年前

    该错误列在 Fixed regressions for Pandas 0.24.2 :

    固定回归 DataFrame.replace() 哪里 regex=True 只是替换了匹配字符串开头的模式(GH25259)

    如你所见,只有

    print(df.replace(to_replace={'c1':{r'D': ''}, 'c2':{r'BD': ''}},regex=True))
    print(df.replace(to_replace={r'D': ''},regex=True))
    

    工作不正常。现在问题已经解决了。