删除或替换列名中的空格

98

如何将数据框列名中的空格替换为"_"?

['join_date' 'fiscal_quarter' 'fiscal_year' 'primary_channel'
 'secondary_channel' 'customer_count' 'new_members' 'revisit_next_day'
 'revisit_14_day' 'demand_1yr' 'revisit_next_day_rate'
 'revisit_14_day_rate' 'demand_1yr_per_new_member' u'ch_Ad Network'
 u'ch_Affiliate' u'ch_Branded SEM' u'ch_DSP' u'ch_Daily Email'
 u'ch_Daily Messaging' u'ch_Direct' u'ch_Direct Publisher' u'ch_Email'
 u'ch_Feeds' u'ch_Native' u'ch_Non-Branded SEM' u'ch_Organic Search'
 u'ch_Paid Social' u'ch_Site' u'ch_Special Email' u'ch_Television'
 u'ch_Trigger Email' u'ch_UNMAPPED' u'ch_Unpaid Social' u'quarter_Q2'
 u'quarter_Q3' u'quarter_Q4']
2个回答

319
  • 去除空格:
  1. 全局 去除空格:
df.columns = df.columns.str.replace(' ', '')
  1. 删除字符串开头的空格:
df.columns = df.columns.str.lstrip()
  1. 删除字符串末尾的空格:
df.columns = df.columns.str.rstrip()
  • 去除两端的空格:
  • df.columns = df.columns.str.strip()
    
    • 用其他字符替换空格(例如下划线):
    1. 无论何处都要替换空格。
    df.columns = df.columns.str.replace(' ', '_')
    
    1. 替换字符串开头处的空格:
    df.columns = df.columns.str.replace('^ +', '_')
    
  • 替换末尾处的空格:
  • df.columns = df.columns.str.replace(' +$', '_')
    
    1. 替换两端的空格:
    df.columns = df.columns.str.replace('^ +| +$', '_')
    

    以上所有内容也适用于特定的列,假设你有一个名为col的列,那么只需执行以下操作:


    df[col] = df[col].str.strip()  # or .replace as above
    

    命令可以链接在一起

    df.columns = df.columns.str.strip().str.replace(' ', '_')
    

    1

    Python字符串方法非常快速并且可以在列表推导式中使用,用于修复列名:

    # replace white spaces by underscores
    df.columns = [c.replace(' ', '_') for c in df]
    
    # strip leading white spaces
    df.columns = [c.lstrip() for c in df]
    
    # strip trailing white spaces
    df.columns = [c.rstrip() for c in df]
    
    # replace leading white spaces by underscores
    df.columns = ['_' + c.lstrip() for c in df]
    

    或者使用map和strip方法:

    # strip leading white spaces
    df.columns = list(map(str.lstrip, df))
    

    由于pandas的向量化字符串方法(pandas.Index.strpandas.Series.str)未经过优化,因此在推荐使用Python字符串方法进行推导时,尤其是在需要链接它们时,通常更快。

    例如,对于100k列名称,如果您需要将3种方法链接在一起,则Python字符串方法比等效的pandas方法快2-5倍。

    n = 100_000
    df = pd.DataFrame([range(n)], columns=[f" {i} {j} " for i,j in zip(range(n), range(n, 0, -1))])
    
    %timeit df.set_axis(df.columns.str.replace('^ +', 'S', regex=True).str.replace(' +$', 'E', regex=True).str.replace(' ', '_'), axis=1)
    # 331 ms ± 2.21 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    %timeit df.set_axis('S' + df.columns.str.strip().str.replace(' ', '_') + 'E', axis=1)
    # 118 ms ± 3.66 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    %timeit df.set_axis(['S' + c.strip().replace(' ', '_') + 'E' for c in df], axis=1)
    # 68 ms ± 5.09 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接