我想在熊猫数据框中的系列上df ['series']。replace('-',''),但是当我运行该方法时没有任何反应。我认为它与破折号是一个运算符有关(可能不正确地使用了该术语)。我尝试过使用Regex,但找不到解决方案。 (列的FYI数据类型为Object)
df['series'] = df['series'].str.replace('-','')
df['series'] = df['series'].str.replace(r'-','')
df['series'] = df['series'].str.replace('\-','')
df['series'] = df['series'].replace('-','')
df['series'] = df['series'].replace(r'-','')
df['series'] = df['series'].replace('\-','')
以上所有将Regex设置为False
答案 0 :(得分:2)
这些不是普通的破折号chr(45)
。他们是chr(8211)
df = pd.DataFrame(dict(series=['hi–hi', 'ho_ho', 'hidy–ho', 'oh–no']))
pandas.Series.str.replace
将默认使用regex
pandas.Series.replace
默认不使用regex
需要regex=True
是因为它使替换能够匹配字符串的一部分。否则,它将仅匹配整个字符串。
这对我有用
df['series2'] = df['series'].replace(chr(8211), '', regex=True)
df
series series2
0 hi–hi hihi
1 ho_ho ho_ho
2 hidy–ho hidyho
3 oh–no ohno
一样
df['series3'] = df['series'].str.replace(chr(8211), '')
df
series series2 series3
0 hi–hi hihi hihi
1 ho_ho ho_ho ho_ho
2 hidy–ho hidyho hidyho
3 oh–no ohno ohno
或
df['series4'] = [s.replace(chr(8211), '') for s in df['series']]
df
series series2 series3 series4
0 hi–hi hihi hihi hihi
1 ho_ho ho_ho ho_ho ho_ho
2 hidy–ho hidyho hidyho hidyho
3 oh–no ohno ohno ohno