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

如何获取pandas.get_dummies()生成的独热编码列?

获取pd.get_dummies生成的新列列表的更优方案

首先看原始DataFrame和独热编码后的结果:

原始DataFrame:

>>> df
   n1  n2   dense c1   c2     c3
0   1   4  [1, 4]  a   h1     tt
1   2   5  [2, 5]  b  bbw   ebay
2   3   6  [3, 6]  c   we  yahoo

执行独热编码:

>>> df_updated = pd.get_dummies(df, prefix_sep='_', dummy_na=True, columns=['c1', 'c2', 'c3'])
>>> df_updated
   n1  n2   dense  c1_a  c1_b  c1_c  c1_nan  c2_bbw  c2_h1  c2_we  c2_nan  c3_ebay  c3_tt  c3_yahoo  c3_nan
0   1   4  [1, 4]     1     0     0       0       0      1      0       0        0      1         0       0
1   2   5  [2, 5]     0     1     0       0       1      0      0       0        1      0         0       0
2   3   6  [3, 6]     0     0     1       0       0      0      1       0        0      0         1       0

已知list(set(df_updated.columns) - set(df.columns))可以获取生成的新列,但该方法会打乱列的原始顺序,以下是几种更优的方案:

方案1:按列顺序筛选新列(简洁版)

直接遍历df_updated的列,筛选出不在原df列名中的列,保留列的原始顺序:

new_cols = [col for col in df_updated.columns if col not in df.columns]

输出结果:

['c1_a', 'c1_b', 'c1_c', 'c1_nan', 'c2_bbw', 'c2_h1', 'c2_we', 'c2_nan', 'c3_ebay', 'c3_tt', 'c3_yahoo', 'c3_nan']

方案2:按原分类列前缀精准筛选

如果担心原列和新列存在同名冲突(虽然本例中不会),可以通过判断列名是否以原分类列名加分隔符开头,来精准筛选:

original_cat_cols = ['c1', 'c2', 'c3']
prefix_sep = '_'
new_cols = [col for col in df_updated.columns if any(col.startswith(f"{cat}{prefix_sep}") for cat in original_cat_cols)]

该方法同样保留列的原始顺序,且筛选逻辑更严谨。

方案3:提前预先生成新列名(无需依赖df_updated)

如果需要在生成df_updated之前就知道会生成哪些列,可以通过遍历原分类列的唯一值(含NaN),拼接前缀和分隔符来生成列名列表:

original_cat_cols = ['c1', 'c2', 'c3']
prefix_sep = '_'
dummy_na = True

new_cols = []
for col in original_cat_cols:
    # 获取列的唯一值(包含NaN)
    unique_vals = df[col].unique()
    for val in unique_vals:
        new_cols.append(f"{col}{prefix_sep}{val}")
    # 如果开启了dummy_na,添加_nan后缀的列名
    if dummy_na:
        new_cols.append(f"{col}{prefix_sep}nan")

该方案适合需要提前规划列结构的场景,且能完全控制列的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:05:20