Skip to main content
 首页 » 编程设计

python之Pandas :Dataframe.replace() 与正则表达式

2025年05月04日28java哥

我有一个看起来像这样的表:

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 

请您参考如下方法:

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

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