Your regex is matching on all - characters:
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
If you put additional boundaries so that it only matches that single character with a termination then it works as expected:
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
Here ^ means start of string and $ means end of string so it will only match on that single character.
Or you can just use replace which will only match on exact matches:
In [29]:
df_raw.replace('-',0)
Out[29]:
A B
0 1.00 1.0
1 -1 -45.00
2 NaN 0
Answer from EdChum on Stack Overflowpython - pandas: Dataframe.replace() with regex - Stack Overflow
Why have to add regex = True to get .replace to work (pandas)
regex - Python string.replace regular expression - Stack Overflow
pandas .replace not working
Hello Very new to pandas. Trying to replace ampersand in my excel file
Why did I have to add regex=True to get this to work. It wouldn’t update otherwise.
df = df.replace(‘%26’ , ‘&’ , regex = True)
str.replace() v2|v3 does not recognize regular expressions.
To perform a substitution using a regular expression, use re.sub() v2|v3.
For example:
import re
line = re.sub(
r"(?i)^.*interfaceOpDataFile.*$",
"interfaceOpDataFile %s" % fileIn,
line
)
In a loop, it would be better to compile the regular expression first:
import re
regex = re.compile(r"^.*interfaceOpDataFile.*$", re.IGNORECASE)
for line in some_file:
line = regex.sub("interfaceOpDataFile %s" % fileIn, line)
# do something with the updated line
You are looking for the re.sub function.
import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print(replaced)
will print axample atring