【问题标题】:pandas: Dataframe.replace() with regex熊猫:Dataframe.replace() 与正则表达式
【发布时间】:2015-11-18 23:50:40
【问题描述】:

我有一个如下所示的表格:

df_raw = pd.DataFrame(dict(A = pd.Series(['1.00','-1']), B = pd.Series(['1.0','-45.00','-'])))

    A       B
0   1.00    1.0
1   -1      -45.00
2   NaN     -

我想使用 dataframe.replace() 将“-”替换为“0.00”,但由于负值“-1”、“-45.00”而难以解决。

如何忽略负值并仅将“-”替换为“0.00”?

我的代码:

df_raw = df_raw.replace(['-','\*'], ['0.00','0.00'], regex=True).astype(np.float64)

错误代码:

ValueError: invalid literal for float(): 0.0045.00

【问题讨论】:

    标签: python string pandas replace floating-point


    【解决方案1】:

    您的正则表达式匹配所有 - 字符:

    In [48]:
    df_raw.replace(['-','\*'], ['0.00','0.00'], regex=True)
    
    Out[48]:
           A          B
    0   1.00        1.0
    1  0.001  0.0045.00
    2    NaN       0.00
    

    如果您设置额外的边界,使其仅匹配带有终止符的单个字符,那么它会按预期工作:

    In [47]:
    df_raw.replace(['^-$'], ['0.00'], regex=True)
    
    Out[47]:
          A       B
    0  1.00     1.0
    1    -1  -45.00
    2   NaN    0.00
    

    这里^ 表示字符串的开头,$ 表示字符串的结尾,因此它只会匹配该单个字符。

    或者你可以只使用replace,它只会匹配完全匹配:

    In [29]:
    
    df_raw.replace('-',0)
    Out[29]:
          A       B
    0  1.00     1.0
    1    -1  -45.00
    2   NaN       0
    

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 2018-04-30
      • 2017-06-18
      • 2016-12-31
      • 2021-08-22
      • 2021-07-20
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多