【问题标题】:Replace all characters at once in Pandas dataframe一次替换 Pandas 数据框中的所有字符
【发布时间】:2018-07-11 14:10:10
【问题描述】:

我有多个不同名称格式的列。 例如:

df.columns = ['name_column 1 (type1), name-column_2-(type1),...]

我需要用下划线替换所有字符(下划线除外)。但是如果有 '-(' ,我只需要一个下划线 '_',而不是每个特殊字符两个。

期望的输出:

df.columns = ['name_column_1_type1, name_column_2_type1,...]

我试过了

for element in df.columns:
    re.sub('[^A-Za-z0-9]+', '_', element)
    print element

但是没有任何反应,就像其他几次尝试一样。

提前致谢

【问题讨论】:

    标签: python regex pandas replace


    【解决方案1】:

    使用replace + strip:

    df.columns = df.columns.str.replace('[^A-Za-z0-9]+', '_').str.strip('_')
    

    示例:

    df = pd.DataFrame(columns=["'name_column 1 (type1)", 'name-column_2-((type1)'])
    print (df.columns.tolist())
    ["'name_column 1 (type1)", 'name-column_2-((type1)']
    
    df.columns =  df.columns.str.replace('[^A-Za-z0-9]+', '_').str.strip('_')
    print (df)
    Empty DataFrame
    Columns: [name_column_1_type1, name_column_2_type1]
    Index: []
    
    print (df.columns.tolist())
    ['name_column_1_type1', 'name_column_2_type1']
    

    【讨论】:

      【解决方案2】:

      试试:

      df.columns = [re.sub('[^A-z0-9]', '_', i).replace(" ", "_").replace("__", "_") for i in df.columns]
      

      【讨论】:

        【解决方案3】:

        什么都没有发生,因为re.sub 的结果没有分配给任何东西,因此丢失了。您可以使用列表理解并将结果分配回df.columns

        df.columns = [re.sub('[^A-Za-z0-9]+', '_', element) for element in df.columns]
        print df.columns
        

        正则表达式模式仍然是错误的,但这应该可以帮助您入门。

        【讨论】:

        • jezrael 的回答更好。
        猜你喜欢
        • 2022-12-03
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 2019-12-05
        • 2013-06-11
        • 2015-05-30
        • 2012-12-30
        相关资源
        最近更新 更多