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



我有一个数据帧。许多列名都有非ASCII字符特殊字符ascii空间读取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.replacefindall:

df.columns = ["".join(l) for l in df.columns.str.replace("s", "_").str.findall("[wd]+")]
print(df)

输出:

Empty DataFrame
Columns: [Col1name, Col_2_name, Col3__name, Col4__name]
Index: []

您可以使用方法replace:

df.columns.str.replace('s+', '_').str.replace('W+', '')

输出:

Index(['Col1name', 'Col_2_name', 'Col3__name', 'Col4__name'], dtype='object')

使用str.replace('_{2,}', '_')可以删除多个下划线。

最新更新