BigQuery结果转Pandas DataFrame报'NoneType'无array属性错误如何解决
报错诱因
该错误由BigQuery Python SDK无法推断customer_email字段的正确数据类型导致:
- 查询返回的
customer_email字段全为NULL值,或部分行是NULL、部分行是有效值,混合类型让SDK无法匹配到对应的pandas数据类型,因此先抛出Unable to determine type for field 'customer_email'警告 - 类型推断失败后SDK会为该字段生成空的类型对象,后续转换流程中调用该对象的
array属性时,就触发了NoneType无array属性的报错
修复方案
任选以下一种方案即可:
- SQL层面强制统一字段类型
在查询SQL中对customer_email字段做显式类型转换,保证返回的字段类型确定:
select SAFE_CAST(customer_email AS STRING) AS customer_email, -- 其他字段保持不变 ... from ...
- 调用to_dataframe时手动指定字段类型
在转换为DataFrame的方法中传入dtypes参数,指定customer_email对应的pandas类型:
df = job.to_dataframe( dtypes={"customer_email": str} )
- 移除冗余字段
如果业务不需要customer_email字段,直接在查询SQL中去掉该字段即可。
验证技巧:可以先打印任务的schema确认字段类型状态:
print(job.schema)正常字段的
type属性会返回明确的类型值,异常字段该属性会为None。
内容的提问来源于stack exchange,提问作者nolwww
相关产品推荐
相关产品推荐

