You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何直接从Python字典创建DuckDBPyRelation(无需借助pandas/PyArrow等库)

如何直接从Python字典创建DuckDBPyRelation(无需借助pandas/PyArrow等库)

当然可以!不用绕路经过pandas或者PyArrow,DuckDB的Python API本身就支持直接从字典生成关系对象,给你两种实用的方法:

方法一:使用duckdb.from_dict()(推荐)

这是最直接高效的方式,和你用Polars/pandas创建DataFrame的逻辑几乎一致,DuckDB会自动推断列的数据类型:

import duckdb

# 定义你的数据字典
my_data = {'a': [1, 2, 3], 'b': [4, 5, 6]}

# 直接转换为DuckDBPyRelation
rel = duckdb.from_dict(my_data)

# 查看结果
rel.show()

执行后你会得到类似这样的输出:

┌───────┬───────┐
│   a   │   b   │
│ int64 │ int64 │
├───────┼───────┤
│     1 │     4 │
│     2 │     5 │
│     3 │     6 │
└───────┴───────┘

生成的rel就是标准的DuckDBPyRelation对象,你可以直接对它执行各种SQL操作,比如过滤、聚合之类的:

# 示例:过滤a大于1的行
filtered_rel = rel.filter("a > 1")
filtered_rel.show()

方法二:构造VALUES子句查询(适合小数据集)

如果是小体量的数据,你也可以手动构造SQL的VALUES子句来生成关系对象:

import duckdb

my_data = {'a': [1, 2, 3], 'b': [4, 5, 6]}

# 把字典里的行数据拼接成VALUES需要的格式
rows = ", ".join([f"({val_a}, {val_b})" for val_a, val_b in zip(my_data['a'], my_data['b'])])
# 构造查询语句
query = f"SELECT * FROM (VALUES {rows}) AS temp_table(a, b)"

# 执行查询得到关系对象
rel = duckdb.sql(query)

rel.show()

这种方法灵活性强,但数据量大的时候不如第一种方法方便,所以更适合快速测试小数据集的场景。

备注:内容来源于stack exchange,提问作者ignoring_gravity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:03:06