我使用pandas_gbq.to_gbq()
将DataFrame
导出到具有空值的col1
的谷歌BigQuery。
>>>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值。
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中的默认表模式:
col1 STRING NULLABLE
day TIMESTAMP NULLABLE
但是,当我尝试将day
定义为BigQuery中的日期类型时,因为我不想要时间戳类型,我遇到了错误(我尝试过NaN,而没有;两者都遇到了错误)。
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
的文档,但我仍然无法弄清楚。
有人能为我指明正确的方向吗?谢谢。
发布于 2020-02-27 01:42:23
我是根据我在评论一节中提出的建议写这个答复的。
根据文档,如果您以规范的日期格式提供字符串,它将被读取为BigQuery中的 DATE 。规范格式如下:
因此,如上文所述,在更改类型和格式之后,您将能够按需要定义模式,或者BigQuery将将其标识为日期。
正如我在评论中提到的,我已经运行了一些测试来确认和举例说明我的建议,我将分享代码,以进一步帮助社区。我在AI平台上使用了木星笔记本来运行下面的示例代码:
!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')
希望能帮上忙。
https://stackoverflow.com/questions/60366474
复制