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

如何为pandas多列批量设置category分类类型,避免重复编写代码?

解决方案

你之前写的循环只是把转换后的分类序列赋值给了临时变量df_col,没有存回原DataFrame,所以不会生成对应的PART*列,调整后的循环写法如下:

# 批量生成需要处理的TIME列,避免手写出错
time_cols = ['TIME{}'.format(i) for i in range(1, 7)]

for idx, time_col in enumerate(time_cols, start=1):
    # 生成对应PART列名,比如TIME1对应PART1
    part_col = 'PART{}'.format(idx)
    # 转换为分类类型并存入DataFrame
    df[part_col] = df[time_col].astype('category')
    # 设置分类范围
    df[part_col].cat.set_categories(LISTED, inplace=True)

效果验证方法

你可以先切取小样本测试逻辑正确性,无需全量运行全量数据:

# 取前5行生成测试用副本,不影响原数据
test_df = df.head().copy()
time_cols = ['TIME{}'.format(i) for i in range(1, 7)]

for idx, time_col in enumerate(time_cols, start=1):
    part_col = 'PART{}'.format(idx)
    test_df[part_col] = test_df[time_col].astype('category')
    test_df[part_col].cat.set_categories(LISTED, inplace=True)

# 验证1:检查是否成功生成所有PART1~PART6列
print(test_df.filter(regex='PART').columns.tolist())
# 验证2:检查新列类型是否为category
print(test_df.filter(regex='PART').dtypes)
# 验证3:抽查分类范围是否和预定义的LISTED一致
print(test_df['PART1'].cat.categories.tolist() == LISTED)

注意事项

你当前使用的Python 2.7 + pandas 0.24.2版本完全支持上述inplace=True的写法,无需担心兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:24:02