python - 熊猫替换系列的方法不适用于“-”
问题描述
我想 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
解决方案
设置
这些不是正常的破折号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
推荐阅读
- arrays - 传递给函数时在C中查找数组的大小
- python - 我收到一个 VSCode python 错误,有人知道为什么吗?
- ios - 为 UITableView 页脚 Swft 设置约束
- ios - 如果应用程序终止,如何恢复场景状态?
- python - 为什么显示“列表索引超出范围”?
- javascript - 如何将字符串大写?
- mysql - Spring Boot 和 HikariPool - 2-3 天后无法创建连接
- excel - 在 Excel VBA 中复制和粘贴可变范围
- java - 如何修复 netbeans 2.8 中的二维数组错误
- python - 如何在csv文件中找到列的五个最大值