Как отправить фрейм данных pandas в bigquery с типами `DATE`?

#python #pandas #datetime #google-bigquery

#python #pandas #datetime #google-bigquery

Вопрос:

Итак, у меня есть фрейм данных, который выглядит следующим образом:

 2020-08-23  3956.5801   3244.0070
2020-08-24  3674.2331   2860.3648
2020-08-25  3422.3573   2953.4077
2020-08-26  4493.0424   2876.9254
2020-08-27  3941.6706   2849.1039
2020-08-28  3799.7326   2682.6734
2020-08-29  4062.6515   2863.2884
2020-08-30  3775.3997   2970.6699
2020-08-31  3405.6144   3071.7572
2020-09-01  3630.2723   2651.4049
  

date Столбец в настоящее время имеет тип datetime. Когда я отправляю это в BQ, оно становится TIMESTAMP в BigQuery. Я попытался преобразовать его в date только с помощью
df.date = pd.to_datetime(df.date).dt.date и он преобразуется, но когда я нажимаю это, он становится STRING . Многие панели мониторинга используют его, поэтому я не могу пойти на компромисс с типом данных. Я также не могу вручную экспортировать csv и импортировать в bigquery, потому что весь смысл программного обеспечения заключается в создании скрипта, который может выполнять это по расписанию. Текущий обходной путь заключается в создании csv и автоматическом выводе схемы.

Ответ №1:

Если вы используете pandas.to_gbq , вы можете указать схему в качестве аргумента:

 schema = [
    {'name': 'date', 'type': 'DATE'}
    {'name': 'close_high', 'type': 'FLOAT64'},
    {'name': 'close_low', 'type': 'FLOAT64'}
]

df['date'] = pd.to_datetime(df['date']).dt.date  # try skipping this line as well
df.to_gqb(tablename, project_id, table_schema=schema)
  

Комментарии:

1. Спасибо! Это решило мою проблему, и указание схемы работает как шарм и для других типов данных

2. Я понял, что нужно установить table_schema, когда я добавляю df в BigQuery

3. Использование pandas_gbq==0.17.0 и это, к сожалению, не работает, возвращая pyarrow.lib.ArrowTypeError: Expected bytes, got a 'datetime.date' object