熊猫到SQL将datetime64索引转换为时区感知

时间:2018-10-25 09:42:04

标签: python postgresql pandas datetime sqlalchemy

我有一个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]

1 个答案:

答案 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)