pandas to sql превращает индекс datetime64 в информацию о часовом поясе - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 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 голосов
/ 25 октября 2018

Я использую 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...