处理 DataFrame 列名常用方式总结

10 阅读1分钟

下面是 处理 DataFrame 列名 的常用方式总结,涵盖单层级列名与**多层级列名(MultiIndex)**的统一和拼接策略:


🔹 1. 保留原始列名(适用于单层或已清洗好的列名)

# 保持不变
df.columns = df.columns

🔹 2. 只保留多层级列名中的第一个层级(例如:只保留 'A')

df.columns = df.columns.map(lambda x: x[0] if isinstance(x, tuple) else x)

📌 示例:

[('A', 'mean'), ('A', 'std'), ('B', 'mean')]['A', 'A', 'B']

🔹 3. 多层级列名拼接为无分隔的字符串

df.columns = df.columns.map(lambda x: ''.join(x) if isinstance(x, tuple) else x)

📌 示例:

[('A', 'mean'), ('A', 'std'), ('B', 'mean')]['Amean', 'Astd', 'Bmean']

🔹 4. 多层级列名拼接为有分隔的字符串(推荐 ✅)

df.columns = df.columns.map(lambda x: '_'.join(filter(None, x)) if isinstance(x, tuple) else x)

📌 示例:

[('A', 'mean'), ('A', 'std'), ('B', 'mean'), ('C', '')]['A_mean', 'A_std', 'B_mean', 'C']

优势:

  • 清晰可读
  • 避免空字符串引发的尾部下划线(如 'C_'

✅ 建议封装成函数:

def flatten_columns(df, sep='_'):
    df.columns = df.columns.map(
        lambda x: sep.join(filter(None, x)) if isinstance(x, tuple) else x
    )
    return df

使用方法:

df = flatten_columns(df, sep='')      # → 'Amean'
df = flatten_columns(df, sep='_')     # → 'A_mean'
df = flatten_columns(df, sep='-')     # → 'A-mean'