pandas to sql превращает индекс datetime64 в информацию о часовом поясе

1

У меня есть 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]

  • 1
    Я сообщил об этом как о проблеме на GitHub
Теги:
pandas
datetime
sqlalchemy

1 ответ

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)

  • 0
    похоже не работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню