如何在 Polars DataFrame 中添加具有 JSON 行表示形式的列?

问题描述 投票:0回答:1

我想使用极坐标来获取 csv 输入并为每行获取另一列(例如称为 json_per_row),其中每行的条目是整行的 json 表示。我还想仅选择要与 json_per_row 列一起包含的列的子集。

理想情况下,我不想对输入的列的数量/名称进行硬编码,但只是为了说明,我在下面提供了一个简单的示例:

# Input: csv with columns time, var1, var2,... 
s1 = pl.Series("time", [100, 200, 300])
s2 = pl.Series("var1", [1,2,3])
s3 = pl.Series("var2", [4,5,6])

# I want to add this column with polars somehow
output_col = pl.Series("json_per_row", [
    json.dumps({ "time": 100, "var1":1, "var2":4 }),
    json.dumps({ "time": 200, "var1":2, "var2":5 }),
    json.dumps({ "time":300 , "var1":3, "var2":6 })
])

# Desired output
df = pl.DataFrame([s1, output_col])
print(df)

那么有没有办法利用 Polars 库中的函数来做到这一点?如果不需要,我宁愿不使用 json.dumps,因为正如文档所说,如果您必须引入外部/用户定义的函数,它会影响性能。谢谢

python python-polars
1个回答
0
投票
  • 您可以使用
    read_csv()
    来读取您的 csv 数据,但这里我将只使用您提供的系列数据。
  • .struct()
    将所有列组合成一个结构列。
  • struct.json_encode()
    转换为json。
(
    pl.DataFrame([s1,s2,s3])
    .select(
        pl.col.time,
        json_per_row = pl.struct(pl.all()).struct.json_encode()
    )
)

┌──────┬────────────────────────────────┐
│ 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} │
└──────┴────────────────────────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.