python - pandas to sql 将 datetime64 索引转换为时区感知

标签 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]

最佳答案

我使用 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/

相关文章:

python - Pandas :按天打破日期时间间隔

python - 将通用日期格式转换为 ISO 周日期格式

postgresql - golang在for循环中追加问题

java - 将预处理语句与 Dropwizard JDBI 和 PostgreSQL UUID 列一起使用

sql - 在 postgresql 中删除/选择层次结构数据

python - Pandas 合并101

python - 如何解决 pandas 中多列的断言错误

Python pandas 将带时区的 unix 时间戳转换为日期时间

python - 给定离散事件时间,检查离散信号是否周期性(或接近)

python - 过滤 tsv 文件以根据列值获取前 3 个出现次数