我想使用极坐标来获取 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,因为正如文档所说,如果您必须引入外部/用户定义的函数,它会影响性能。谢谢
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} │
└──────┴────────────────────────────────┘