我有一个pandas
Dataframe
,其索引类型为datetime64[ns]
。
当我使用to_sql
方法时,我希望将索引创建为timestamp
postgres列,但是它会创建一个timestamptz
列。
为什么会这样?
请注意,如果datetime64[ns]
列不是索引而是普通列,则不会发生。
pandas 0.23.4,psycopg2 2.7.4,sqlalchemy 1.2.7,PostgreSQL 9.6.6
示例
dates = pd.date_range('2018-01-01', periods=5, freq='6h')
df_test = pd.DataFrame({'nums': range(5)}, index=dates)
nums
2018-01-01 00:00:00 0
2018-01-01 06:00:00 1
2018-01-01 12:00:00 2
插入postgres
df_test.to_sql('foo_table',postgres_uri,schema='data_test',index_label='info_date')
从数据库中读取时,我得到了具有不同类型的索引
df_db = pd.read_sql_table('foo_table',postgres_uri,schema='data_test',index_col='info_date')
nums
info_date
2018-01-01 00:00:00+00:00 0
2018-01-01 06:00:00+00:00 1
2018-01-01 12:00:00+00:00 2
您会看到info_date
的类型为datetime64[ns, UTC]
答案 0 :(得分:0)
我使用mysql,但是如果您设置index = True呢?
我总是使用以下代码写入我的数据库:
df_test.to_sql(name='database', chunksize=20000, con=conn, index=True, if_exists='replace')
所以也许这行得通:
df_test.to_sql('foo_table',postgres_uri,schema='data_test',index=True)