У меня есть pandas
Dataframe
с индексом, который имеет тип datetime64[ns]
. Когда я использую метод to_sql
я ожидаю, что индекс будет создан как столбец postgres timestamp
, однако он создает столбец timestamptz
.
с чего бы это?
Обратите внимание, что когда столбец datetime64[ns]
является не индексом, а обычным столбцом, этого не происходит.
Панды 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)