Reputation: 141
I have a dataframe and in early in my script I name my columns using:
beta = 1.17
names =np.arange((beta-0.05),(beta+0.05),.01)
dfs.columns = [r'$\beta$'+str(i) for i in names]
Later in the script I want to replace r'$\beta$'
with ats
.
I have tried the following:
dfs.columns = dfs.columns.str.replace("[(r'$\beta$')]", "ats")
But, it isn't working as expected. Any suggestions are appreciate.
Thanks.
Upvotes: 1
Views: 1194
Reputation: 2553
The problem seems to be that pandas.Series.replace
use regex. So you need backslash to indicate a character but not a special character.
df.columns.str.replace(r"\$\\beta\$", "ats")
Upvotes: 0
Reputation: 862781
You need escape special regex characters $
:
beta = 1.17
names =np.arange((beta-0.05),(beta+0.05),.01)
dfs = pd.DataFrame(0, columns=names, index=[0])
dfs.columns = [r'$\beta$'+str(i) for i in names]
dfs.columns = dfs.columns.str.replace(r'\$\\beta\$', "ats")
print (dfs)
ats1.1199999999999999 ats1.13 ats1.14 ats1.15 ats1.16 ats1.17 \
0 0 0 0 0 0 0
ats1.18 ats1.19 ats1.2 ats1.21 ats1.22
0 0 0 0 0 0
Upvotes: 2
Reputation: 323306
I using str.replace
twice
df.columns.str.replace('[^0-9a-zA-Z.]+', "").str.replace('beta','ats')
Index(['ats1.1199999999999999', 'ats1.13', 'ats1.14', 'ats1.15', 'ats1.16',
'ats1.17', 'ats1.18', 'ats1.19', 'ats1.2', 'ats1.21', 'ats1.22'],
dtype='object')
Upvotes: 1