我有一个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",""))
所以我想知道为什么在以前的情况下它不起作用?
注意:我尝试仅替换 $ ,但令人震惊的是它可以正常工作。
答案 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","")