熊猫: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() 与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

pandas.DataFrame.replace 用通配符

RedHat 6配置DNS服务实现主从同步与正反向解析

geoserver 自动发布shp与正射影像

领导力与正念

领导力与正念

数据特征分析:4.正态分布与正态性体验