首页 > 解决方案 > 如何从列名中删除非 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...

因此,用下划线替换空格并删除列名中的任何非数字和非字符。

标签: pythonpandasmultiple-columns

解决方案


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: []

推荐阅读