如何在Polars DataFrame中添加行的JSON格式列?
解决方案
完全可以用Polars内置函数实现需求,无需依赖json.dumps这类外部函数,性能更优。核心思路是利用Polars的结构体(struct)类型和内置的JSON编码方法:
实现步骤
- 将整行数据打包成结构体列(自动以原列名为键)
- 用Polars内置的
json_encode()方法将结构体转成JSON字符串 - 保留需要的列 + 新生成的JSON列
代码示例
import polars as pl # 构造示例输入DataFrame(对应CSV读取后的结果) df_input = pl.DataFrame({ "time": [100, 200, 300], "var1": [1, 2, 3], "var2": [4, 5, 6] }) # 生成JSON列并保留指定列 df_output = df_input.with_columns( # 将所有列打包为结构体,再转成JSON字符串 json_per_row=pl.struct(pl.all()).json_encode() ).select( # 选择需要保留的列 + 新生成的JSON列 "time", "json_per_row" ) print(df_output)
输出结果
shape: (3, 2) ┌──────┬───────────────────────────────────────────┐ │ time ┆ json_per_row │ │ --- ┆ --- │ │ i64 ┆ str │ ╞══════╪═══════════════════════════════════════════╡ │ 100 ┆ {"time":100,"var1":1,"var2":4} │ │ 200 ┆ {"time":200,"var1":2,"var2":5} │ │ 300 ┆ {"time":300,"var1":3,"var2":6} │ └──────┴───────────────────────────────────────────┘
关键细节说明
pl.struct(pl.all()):自动捕获当前DataFrame的所有列,打包成结构体类型,无需硬编码列名或列数.json_encode():Polars原生的结构体转JSON方法,完全在内部优化执行,性能远高于Python层面的json.dumps循环- 如果需要仅用部分列生成JSON,只需把
pl.all()换成指定列列表(比如pl.col(["var1", "var2"]))即可
内容的提问来源于stack exchange,提问作者SuperJeff
相关产品推荐
相关产品推荐

