You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将混合普通/元组扁平索引转换为下划线分隔简单列名

Pandas混合类型索引转下划线分隔列名实现

目标

将同时包含普通单值、元组形式多层值的pd.Index对象,统一转换为下划线分隔格式的简单字符串列名。

  • 待处理索引定义:
import pandas as pd
index = pd.Index([
    'id',
    'gender',
    'age',
    ('var', 'mask', 3),
    ('var', 'mask', 4),
    ('var', 'mask', 1),
])
  • 期望转换结果:
['id', 'gender', 'age', 'var_mask_3', 'var_mask_4', 'var_mask_1']

原有写法的问题

  • 写法[ '_'.join(str(x)) for x in index ]:对每个索引项整体转字符串后再执行join,join会逐字符遍历字符串拼接,最终得到单字符间插下划线的错误结果。
  • 写法[ '_'.join(x) for x in index ]:存在两个问题,一是单值字符串传入join会被拆分为单个字符拼接,二是元组内包含整数类型值,join仅支持字符串类型元素拼接,会触发TypeError: sequence item 2: expected str instance, int found报错。

正确实现

核心逻辑:遍历索引项时先判断类型,若为元组则先将元组内所有元素转为字符串,再用下划线拼接;若为单值则直接保留。

列表推导写法

converted_index = [
    '_'.join(map(str, item)) if isinstance(item, tuple) else item
    for item in index
]

Pandas向量化写法

converted_index = index.map(
    lambda x: '_'.join(map(str, x)) if isinstance(x, tuple) else x
).tolist()

两种写法执行后都能得到预期结果。


内容的提问来源于stack exchange,提问作者jpetot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:09:11