能否在Julia DataFrames中用CategoricalArrays批量将字符串列转为分类列?
方案1:使用transform!单行批量处理
这是最简洁的写法,适合没有额外自定义判断逻辑的场景:
using DataFrames, CategoricalArrays # 场景A:不需要固定levels,自动识别每列的唯一值作为levels transform!(df, names(df, String) .=> categorical, renamecols = false) # 场景B:对齐你原有代码的固定levels、ordered参数配置 transform!(df, names(df, String) .=> (col -> categorical(col; levels = ["x"], ordered = false)), renamecols = false)
参数说明:
names(df, String)会自动筛选出所有元素类型为字符串的列,你可以替换为自定义的列名数组(比如[:col1, :col2, :col3])来指定要转换的列renamecols = false保证转换后列名不变,不会自动添加函数名后缀
方案2:循环遍历处理
适合需要在转换前添加额外判断逻辑的场景,比如按列名规则筛选、判断列缺失率等:
for col_name in names(df, String) # 可在此处添加自定义判断逻辑,示例:仅转换列名以"type_"开头的列 # startswith(col_name, "type_") || continue df[!, col_name] = categorical(df[!, col_name]; levels = ["x"], ordered = false) end
注意事项
如果你的业务不需要强制固定所有分类列的levels为["x"],建议删掉levels参数,categorical函数会自动提取每列的非重复值作为levels,避免列中存在其他值时被自动转换为缺失值。
你当前的数据集规模(100余列、5000行)用上述两种方法都可以在毫秒级完成转换,不存在性能问题。
内容的提问来源于stack exchange,提问作者Jason Thompson
相关产品推荐
相关产品推荐

