#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