熊猫替换系列不适用于“-”的方法

时间:2019-05-23 19:52:16

标签: python replace operators

Sample of data I'm running the replace method on

我想在熊猫数据框中的系列上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

1 个答案:

答案 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