我有一个数据帧。许多列名都有非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.replace
和findall
:
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,}', '_')
可以删除多个下划线。