如何为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
相关产品推荐
相关产品推荐

