Python Polars是否支持原生方式存储DataFrame属性?
使用Polars读写带自定义属性的Parquet文件
Polars内置的Parquet读写功能支持自定义元数据,可以轻松实现DataFrame关联属性的可靠存储与读取,无需依赖PyArrow的复杂配置。
写入带属性的Parquet文件
将自定义属性序列化为JSON字符串,通过write_parquet的metadata参数存入Parquet文件:
import polars as pl import json # 创建目标DataFrame df = pl.DataFrame({ 'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'], }) # 定义DataFrame关联属性 df_attributes = { "source": "dataset.csv", "created_on": "2023-07-06", "unique_identifier": "ABC123" } # 将属性转为JSON字符串,存入Parquet元数据字典 parquet_metadata = {"custom_attributes": json.dumps(df_attributes)} # 写入Parquet文件,附带自定义元数据 df.write_parquet("dataset_with_attrs.parquet", metadata=parquet_metadata)
读取Parquet文件及关联属性
先读取Parquet文件的元数据解析出属性,再读取DataFrame本身:
import polars as pl import json # 读取Parquet文件的元数据 parquet_file_metadata = pl.io.parquet.read_metadata("dataset_with_attrs.parquet") # 提取并解析自定义属性(元数据值为bytes类型,需解码后反序列化) loaded_attributes = json.loads(parquet_file_metadata.metadata[b'custom_attributes'].decode('utf-8')) # 读取DataFrame内容 loaded_df = pl.read_parquet("dataset_with_attrs.parquet") # 验证结果 print("读取到的属性:", loaded_attributes) print("读取到的DataFrame:") print(loaded_df)
注意事项
- Polars要求Parquet元数据的键值均为字符串类型,因此需要将字典格式的属性序列化为JSON字符串后存储。
- 读取元数据时,键会自动转为bytes类型,需使用字节形式的键(如
b'custom_attributes')访问对应值,解码后再反序列化为字典。
内容的提问来源于stack exchange,提问作者Isaacnfairplay
相关产品推荐
相关产品推荐

