使用DolphinDB Python API上传DataFrame指定列类型遇Pandas警告
指定DolphinDB列类型的官方方法及警告处理
官方推荐的列类型指定方式
无需修改pandas DataFrame的属性,直接通过定义DolphinDB表结构(schema)来指定列类型,这是官方推荐的无警告方案:
- 构造表结构Schema
使用DolphinDB Python API提供的tableSchema函数或直接定义列类型列表,明确指定每列对应的DolphinDB数据类型:
import dolphindb as ddb import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'trade_time': ['2024-01-01 10:00:00', '2024-01-01 10:01:00'], 'price': [100.5, 101.2] }) # 定义DolphinDB表结构:trade_time设为DATETIME类型,price设为DOUBLE类型 schema = ddb.tableSchema([ ('trade_time', ddb.DT_DATETIME), ('price', ddb.DT_DOUBLE) ])
- 带Schema上传数据
有两种常见上传方式:
- 方式一:先创建持久化表再插入
适用于写入DFS数据库的场景:
# 连接服务器 s = ddb.session() s.connect("localhost", 8848, "admin", "123456") # 创建数据库与表 s.run(""" db = database("dfs://tradeDB", VALUE, 2024) tb = db.createTable({schema}, "tradeTable") """, schema=schema) # 插入数据 s.run("tb.append!{df}", df=df)
- 方式二:直接上传临时表
适用于内存临时表场景:
s.upload({'trade_data': df}, schema=schema)
若坚持使用__DolphinDB_Type__属性的警告抑制
如果仍需要通过给DataFrame添加__DolphinDB_Type__属性的方式指定类型,可以针对性抑制Pandas的UserWarning:
import warnings from pandas.errors import UserWarning # 抑制DataFrame自定义属性触发的警告 warnings.filterwarnings("ignore", category=UserWarning, message="^Pandas doesn't allow adding new attributes to DataFrame instances via dot assignment.*")
总结
优先使用Schema指定法,这是官方设计的标准流程,既能精准控制列类型,又不会触发Pandas警告;仅在特殊场景下,才考虑使用属性法并配合警告抑制。
内容的提问来源于stack exchange,提问作者Olivia




