首页 > 解决方案 > 熊猫替换系列的方法不适用于“-”

问题描述

我正在运行替换方法的数据示例

我想 df['series'].replace('-','') 在熊猫数据框中的系列上,但是当我运行该方法时没有任何反应。我认为这与破折号是运算符这一事实有关(可能错误地使用了该术语)。我试过玩正则表达式,但找不到解决方案。(仅供参考,列的数据类型是对象)

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

标签: pythonreplaceoperators

解决方案


设置

这些不是正常的破折号chr(45)。他们是chr(8211)

df = pd.DataFrame(dict(series=['hi–hi', 'ho_ho', 'hidy–ho', 'oh–no']))

  • pandas.Series.str.replaceregex默认使用
  • 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

推荐阅读