Python 如何从列名中删除非ASCII字符和空格

Python 如何从列名中删除非ASCII字符和空格,python,pandas,multiple-columns,Python,Pandas,Multiple Columns,我有一个数据帧。许多列名具有非ASCII字符和特殊字符如(),/,+。(中间的非ASCII点)和非ASCII空间< /强>strong>读取csv时未发生此情况。这是由于单热编码造成的。(当我将分类变量转换为数字列时,类别值具有非ascii值) df Col1/name Col 2() name Col3 + name Col4 ^¨ name etc... 预期产出 我只想在列名中添加数字、下划线和字符(我只想更改列名,而不是数据框或行中的任何值)。这是必要的,因为某些机

我有一个数据帧。许多列名具有非ASCII字符特殊字符如(),/,+。(中间的非ASCII点)和<强>非ASCII空间< /强>strong>读取csv时未发生此情况。这是由于单热编码造成的。(当我将分类变量转换为数字列时,类别值具有非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
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: []
Index(['Col1name', 'Col_2_name', 'Col3__name', 'Col4__name'], dtype='object')

您可以使用方法
replace

df.columns.str.replace('\s+', '_').str.replace('\W+', '')
输出:

Empty DataFrame
Columns: [Col1name, Col_2_name, Col3__name, Col4__name]
Index: []
Index(['Col1name', 'Col_2_name', 'Col3__name', 'Col4__name'], dtype='object')

你可以用str.replace(“{2,},“{”)删除多个下划线

为什么不先清除列中的非ascii字符呢?首先是一个热编码?有1000列和300万行。太费劲了,我的列名中只需要ascii字符,机器学习算法就可以工作了