You need to enable JavaScript to run this app. Pandas加载数据到BigQuery报str与int不可比较TypeError求助
优惠活动
大模型
产品
解决方案
定价
更多

Pandas加载数据到BigQuery报str与int不可比较TypeError求助

问题排查与解决方案

核心报错原因

你代码中的column_names列表重复声明了website字段,触发了BigQuery Python客户端处理DataFrame列索引时的内部异常:

# 原代码错误点:website列重复出现两次
column_names = ["date", "query", "page", "clicks", "impressions", "ctr", "position", "website", "country", "device", "website"]

pandas本身允许存在同名列,但BigQuery的load_table_from_dataframe方法做列映射时,会对列索引做去重、排序校验,过程中涉及的索引操作触发了字符串与整数的类型比较错误,这部分逻辑属于BigQuery SDK内部实现,所以你自己的业务代码里不会显式出现比较逻辑。

修复步骤

  • 第一步:删除column_names列表中重复的website字段,确保所有列名唯一
# 修正后的列名列表
column_names = ["date", "query", "page", "clicks", "impressions", "ctr", "position", "website", "country", "device"]
result = result.reindex(columns=column_names)
  • 第二步:显式转换数值列类型,避免列内出现混合类型的问题
result[['clicks', 'impressions']] = result[['clicks', 'impressions']].astype(int)
result[['ctr', 'position']] = result[['ctr', 'position']].astype(float)
  • 第三步(可选):显式指定BigQuery表Schema,减少SDK自动推断类型的出错概率
job_config.schema = [
    bigquery.SchemaField("date", "STRING"),
    bigquery.SchemaField("query", "STRING"),
    bigquery.SchemaField("page", "STRING"),
    bigquery.SchemaField("clicks", "INTEGER"),
    bigquery.SchemaField("impressions", "INTEGER"),
    bigquery.SchemaField("ctr", "FLOAT"),
    bigquery.SchemaField("position", "FLOAT"),
    bigquery.SchemaField("website", "STRING"),
    bigquery.SchemaField("country", "STRING"),
    bigquery.SchemaField("device", "STRING"),
]

内容的提问来源于stack exchange,提问作者sitestem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:06:10