pandas - 使用 load_table_from_dataframe() 存储具有日期时间对象的数据帧时的架构冲突
问题描述
我正在尝试将 Pandas 中DataFrame
的数据加载到 BigQuery 表中。有DataFrame
一个 dtype 列datetime64[ns]
,当我尝试使用存储 df 时load_table_from_dataframe()
,我得到
google.api_core.exceptions.BadRequest:400 提供的架构与表 [表名] 不匹配。字段 compute_triggered_time 已将类型从 DATETIME 更改为 TIMESTAMP。
该表具有读取的模式
CREATE TABLE `[table name]` (
...
computation_triggered_time DATETIME NOT NULL,
...
)
在 中DataFrame
,computation_triggered_time
是一datetime64[ns]
列。当我从 CSV 读取原件DataFrame
时,我将其从文本转换为日期时间,如下所示:
df['computation_triggered_time'] = \
df.to_datetime(df['computation_triggered_time']).values.astype('datetime64[ms]')
笔记:
该.values.astype('datetime64[ms]')
部分是必要的,因为load_table_from_dataframe()
使用 PyArrow 序列化 df 并且如果数据具有纳秒精度则失败。错误类似于
[...] 从时间戳 [ns] 转换为时间戳 [ms] 会丢失数据
解决方案
这看起来像是谷歌的 google-cloud-python 包的问题,你能报告那里的错误吗?https://github.com/googleapis/google-cloud-python
推荐阅读
- java - Excel 日期自动转换为数字 此数字再次转换为 Java 日期
- r - 如何缩小汇总预测数据和每月真实数据之间的差距。
- swift - Swift4:Alamofire 使用预签名链接上传到 s3 并检查 md5
- asp.net-mvc - 在 asp.net MVC 中使用 ValidateAntiForgeryToken 和 JQGrid?
- python - Django时间重新格式化
- python - 如何在没有函数的情况下将 executor.map 应用于 for 循环?
- google-apps-script - 使用谷歌应用脚本将生成的谷歌表单移动到特定的谷歌驱动器文件夹
- javascript - 在前端和后端使用常量整数
- sql-server - 如果有人对数据库执行任何查询,则发送电子邮件
- python - aiortc 集成到 Django 项目中