首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在定义NaN时,无法向BigQuery表中插入带有table_schema (或无)值的Pandas数据格式

在定义NaN时,无法向BigQuery表中插入带有table_schema (或无)值的Pandas数据格式
EN

Stack Overflow用户
提问于 2020-02-23 20:22:25
回答 1查看 1.8K关注 0票数 2

我使用pandas_gbq.to_gbq()DataFrame导出到具有空值的col1的谷歌BigQuery。

代码语言:javascript
代码运行次数:0
运行
复制
>>>df
col1    day
apple   2019-03-01
None    2019-03-02
banana  2019-03-02
None    2019-03-03

>>>df.dtypes
col1   object
day    datetime64[ns]
dtype: object

在不定义表模式的情况下,我能够成功地导出BigQuery中的表,并在col1中使用null值。

代码语言:javascript
代码运行次数:0
运行
复制
from google.cloud import bigquery
import pandas as pd
import pandas_gbq

pandas_gbq.to_gbq(df
        ,table_name
        ,project_id='project-dev'
        ,chunksize=None
        ,if_exists='replace'
        )

BigQuery中的默认表模式:

代码语言:javascript
代码运行次数:0
运行
复制
col1   STRING      NULLABLE
day    TIMESTAMP   NULLABLE

但是,当我尝试将day定义为BigQuery中的日期类型时,因为我不想要时间戳类型,我遇到了错误(我尝试过NaN,而没有;两者都遇到了错误)。

代码语言:javascript
代码运行次数:0
运行
复制
table_schema = [{'name':'day', 'type':'DATE'}]

pandas_gbq.to_gbq(df
        ,table_name
        ,project_id='project-dev'
        ,chunksize=None
        ,if_exists='replace'
        ,table_schema=table_schema
        )

错误信息:

在df中,"/Users/xxx/anaconda3/lib/python3.6/site-packages/pandas_gbq/gbq.py",文件第1224行,在to_gbq progress_bar=progress_bar中,table_schema=table_schema文件第606行,在"/Users/xxx/anaconda3/lib/python3.6/site-packages/pandas_gbq/gbq.py",文件load_data self.process_http_error(ex)第425行中,process_http_error提出GenericGBQException(“原因:{0}".format(ex)) pandas_gbq.gbq.GenericGBQException: pandas_gbq.gbq.GenericGBQException: 400错误时读取数据,错误消息: CSV表遇到太多错误,放弃。行: 1;错误: 1。有关更多细节,请查看errors[]集合。

我已经阅读了pandas_gbq的文档,但我仍然无法弄清楚。

gbq

有人能为我指明正确的方向吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-27 09:42:23

我是根据我在评论一节中提出的建议写这个答复的。

根据文档,如果您以规范的日期格式提供字符串,它将被读取为BigQuery中的 DATE 。规范格式如下:

  • YYYY:四位数年
  • MM:一个或两个数字月
  • DD:一到两位数的日子

因此,如上文所述,在更改类型和格式之后,您将能够按需要定义模式,或者BigQuery将将其标识为日期。

正如我在评论中提到的,我已经运行了一些测试来确认和举例说明我的建议,我将分享代码,以进一步帮助社区。我在AI平台上使用了木星笔记本来运行下面的示例代码:

代码语言:javascript
代码运行次数:0
运行
复制
!pip install pandas_gbq

from google.cloud import bigquery 
import pandas as pd


table_schema = [{'name':'my_datetime', 'type':'DATE'},{'name':'my_string', 'type':'string'}]
df = pd.DataFrame(
    {
        "my_datetime": ["2020-01-01", "2020-01-01", "2020-01-01"],
        "my_string": ['a1',None, 'a3'],
    }
)

df.to_gbq(destination_table='data_frame.data_set', project_id='project_id', if_exists='replace')

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60366474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档