熊猫:Dataframe.replace() 与正则表达式
Posted
技术标签:
【中文标题】熊猫:Dataframe.replace() 与正则表达式【英文标题】:pandas: Dataframe.replace() with regex 【发布时间】: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
【问题讨论】:
【参考方案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
【讨论】:
以上是关于熊猫:Dataframe.replace() 与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章