【问题标题】:How to remove non-ASCII characters and space from column names如何从列名中删除非 ASCII 字符和空格
【发布时间】:2020-06-18 22:18:50
【问题描述】:

我有一个数据框。许多列名包含非 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...

所以用下划线替换空格并删除列名中的所有非数字和非字符。

【问题讨论】:

  • 为什么不先从你单热编码的列中清除非 ascii 字符?
  • 有 1000 列和 30 万行.. 太费劲了
  • 我的列名中只需要 ascii 字符,机器学习算法就可以工作

标签: python pandas multiple-columns


【解决方案1】:

使用pandas.Series.str.replacefindall 的一种方式:

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

【讨论】:

    【解决方案2】:

    可以使用replace的方法:

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

    输出:

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2016-07-20
      • 2018-07-02
      • 2012-01-21
      • 2018-07-30
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多