我在python中运行以下代码以将其附加到DolphinDB数据库内存表中:
import dolphindb as ddb
import pandas as pd
import numpy as np
s = ddb.session()
s.connect("localhost", 8848, "admin", "123456")
script = """t = table(1:0,`id`date`ticker`price, [INT,DATE,STRING,DOUBLE])
share t as tglobal"""
s.run(script)
tb=pd.DataFrame({'id': [1, 2, 2, 3],
'date': np.array(['2019-10-30', '2019-10-30', '2019-10-30', '2019-10-30'], dtype='datetime64[D]'),
'ticker': ['AAPL', 'AMZN', 'FB', 'GOOG'],
'price': [243.26, 1779.99, 188.25, 1261.29]})
s.run("append!{tglobal}",tb)
但是,我遇到了一个错误:
pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: -1817286-04-17 00:00:00
有人知道我做错了吗?
答案 0 :(得分:2)
由于Python熊猫中与时间相关的所有数据类型均为datetime64,因此在将DataFrame上传到DolphinDB之后,所有时间类型列均属于nanotimestamp类型,因此在将DataFrame与time列追加时,我们需要检查DolphinDB上的时间服务器列数据类型转换:首先将DataFrame上传到服务器,通过select语句选择表中的每一列,然后执行时间类型转换(此示例将nanotimestamp类型转换为日期类型),然后将其附加到内存中表格中,如下:
tb=pd.DataFrame({'id': [1, 2, 2, 3],
'date': np.array(['2019-10-30', '2019-10-30', '2019-10-30', '2019-10-30'], dtype='datetime64[D]'),
'ticker': ['AAPL', 'AMZN', 'FB', 'GOOG'],
'price': [243.26, 1779.99, 188.25, 1261.29]})
s.upload({'tb':tb})
s.run("tableInsert(tglobal,(select id, date(date) as date, ticker, price from tb))")