python - 如何从列名中删除非 ASCII 字符和空格
问题描述
我有一个数据框。许多列名包含非 ASCII 字符和特殊字符,如 ()、/、+、. (中间的非 ascii 点)等和非 ascii 空格。阅读 csv 时没有发生这种情况。这是由于 one-hot 编码而发生的。(当我将分类变量转换为数字列并且类别值具有非 ascii 值时)
df
Col1/name Col 2() name Col3 + name Col4 ^¨ name etc...
预期产出
我只需要列名中的数字、下划线和字符(我只想更改列名而不是数据框或行中的任何值)。这是必要的,因为一些机器学习算法(例如 lightGBM)不适用于列名中的非 ASCII 字符或非 ASCII 空格。
预期输出df:
Col1name Col_2_name Col3__name Col4__name etc...
因此,用下划线替换空格并删除列名中的任何非数字和非字符。
解决方案
pandas.Series.str.replace
使用and的一种方法findall
:
df.columns = ["".join(l) for l in df.columns.str.replace("\s", "_").str.findall("[\w\d]+")]
print(df)
输出:
Empty DataFrame
Columns: [Col1name, Col_2_name, Col3__name, Col4__name]
Index: []
推荐阅读
- html - CSS 未在 React 中应用
- azure-devops - 如何在 Azure devops 中跨项目查找所有已完成的 PR
- python - 名称中包含编号索引的数据文件
- asp.net-core - JsonPatchDocument
调用 API 时抛出 400 错误 - schemaspy - 带有类文件版本错误的 Java 运行时错误
- python - 无法从我的 python 烧瓶应用程序中的 HTML 表单中获取输入
- java - 使用 json simple 时,我的 json 文件最后被截断在 ~250 000 个字符
- xml - 为什么此 XSLT 代码显示所有属性值而不仅仅是模型属性值?
- meetup - Mac 应用程序在会议应用程序中共享屏幕区域
- javascript - 保持选定的菜单处于活动状态