我有一个 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]
最佳答案
我使用 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)
关于python - pandas to sql 将 datetime64 索引转换为时区感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52986158/