熊猫数据框替换列中的子字符串会产生意外结果

时间:2019-01-14 09:02:56

标签: python pandas

我真的很努力地在Pandas数据框列内进行简单的字符串查找和替换。

作为一个简单的示例,我在列值中找到“(C)”,我想用“”代替。

这是一些非常简单的代码,我无法使用pd.str.replace()来工作,根据这篇文章的第一个答案(Python Pandas: How to replace a characters in a column of a dataframe?),我认为该代码应该有效(但请猜测空格和方括号可能会使您感到困惑?)。我已经尝试过一些正则表达式,但是显然必须做错了。

data = {'id': [1, 2, 3, 4], 'name': ['name1 (C)', 'name2 (B)', 'name3', 'name4']}
df_data = pd.DataFrame.from_dict(data)
df_data['name'] = df_data['name'].str.replace(' (C)', '')
print(df_data)
df_data['name'].replace({' (C)': ''}, inplace=True, regex=True)
print(df_data)
df_data['name'].replace({'( (C))': ''}, inplace=True, regex=True)
print(df_data)

得出的结果:

   id       name
0   1  name1 (C)
1   2  name2 (B)
2   3      name3
3   4      name4
   id       name
0   1  name1 (C)
1   2  name2 (B)
2   3      name3
3   4      name4
   id       name
0   1  name1 (C)
1   2  name2 (B)
2   3      name3
3   4      name4

然而,真正令人困惑的是,如果我仅将其运行到一个纯字符串变量中,那么使用replace函数就可以完美地工作一切。

mystr = "name (C)"
mystr.replace(" (C)", "")
Out[23]: 'name'

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

首先转义(),因为特殊的正则表达式字符:

df_data['name'] = df_data['name'].str.replace(' \(C\)', '')

或者:

df_data['name'] = df_data['name'].replace(' \(C\)', '', regex=True)

print(df_data)
   id       name
0   1      name1
1   2  name2 (B)
2   3      name3
3   4      name4

答案 1 :(得分:0)

在使用regex时将转义符用于特殊字符:

df_data['name'].str.replace(' \(C\)','')