无法替换熊猫列中包含$的字符串

时间:2018-09-28 12:03:17

标签: python string pandas series

我有一个dataframe

df = pd.DataFrame({'a':[1,2,3], 'b':[5, '12$sell', '1$sell']})

我想替换b列中的 $ sell

所以我尝试了如下的replace()方法

df['b'] = df['b'].str.replace("$sell","")

但是它不会替换给定的字符串,并且给了我与原始字符串相同的数据框。

当我与apply一起使用时

df['b'] = df['b'].apply(lambda x: str(x).replace("$sell",""))

所以我想知道为什么在以前的情况下它不起作用?

注意:我尝试仅替换 $ ,但令人震惊的是它可以正常工作。

4 个答案:

答案 0 :(得分:7)

它是正则表达式元字符(字符串的结尾),请对其进行转义或添加参数regex=False

df['b'] = df['b'].str.replace("\$sell","")
print (df)
   a    b
0  1  NaN
1  2   12
2  3    1

df['b'] = df['b'].str.replace("$sell","", regex=False)

如果还希望值5是数字,则将Series.replace与regex = True一起用于替换子字符串-不会触摸数字值:

df['b'] = df['b'].replace("\$sell","", regex=True)

print (df['b'].apply(type))
0    <class 'int'>
1    <class 'str'>
2    <class 'str'>
Name: b, dtype: object

或将列的所有数据强制转换为字符串:

df['b'] = df['b'].astype(str).str.replace("$sell","", regex=False)

print (df['b'].apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
Name: b, dtype: object

要获得更好的性能,请使用列表理解功能:

df['b'] = [str(x).replace("$sell","") for x in  df['b']]

print (df)
   a   b
0  1   5
1  2  12
2  3   1

答案 1 :(得分:4)

df['b'] = df['b'].str.replace("$sell","", regex=False)

答案 2 :(得分:4)

$是正则表达式的特殊字符。默认情况下,pd.Series.str.replace使用regex=True

相反,请指定regex=False

df['b'] = df['b'].str.replace('$sell', '', regex=False)

答案 3 :(得分:4)

str.replace假定正在使用正则表达式。因此您需要使用转义符,即

df['b'] = df['b'].str.replace("\$sell","")