尝试使用 pandas 数据框将数据附加到 BigQuery 表时出错

Posted

技术标签:

【中文标题】尝试使用 pandas 数据框将数据附加到 BigQuery 表时出错【英文标题】:Error while trying to append data to a BigQuery table using pandas data frame 【发布时间】:2021-06-01 06:06:35 【问题描述】:

我有一个看起来像这样的 pandas 数据框:

它有 6 列。我尝试将其附加到 BigQuery 中具有相同架构的现有表中:

import os
from google.cloud import bigquery

# Login credentials
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="secret.json"

# Initialize big query
client = bigquery.Client()

# Table information
project = "xxxxxxxx"
dataset = "Vahan"
table = "rto_data"
table_id = '..'.format(project, dataset, table)

# Setup for upload
job_config = bigquery.LoadJobConfig()

# Define the table schema
schema = [bigquery.SchemaField(name='State', field_type='STRING', mode='NULLABLE'),
          bigquery.SchemaField(name='RTO', field_type='STRING', mode='NULLABLE'),
          bigquery.SchemaField(name='Registration_Number', field_type='STRING', mode='NULLABLE'),
          bigquery.SchemaField(name='Maker', field_type='STRING', mode='NULLABLE'),
          bigquery.SchemaField(name='Date', field_type='DATE', mode='NULLABLE'),
          bigquery.SchemaField(name='Registrations', field_type='INTEGER', mode='NULLABLE')]

job_config.create_disposition = "CREATE_IF_NEEDED"


# Make the API request
load_result = client.load_table_from_dataframe(dataframe=df,
                                               destination=table_id, 
                                               job_config=job_config)

# Wait for query to finish working
load_result.result()

# Make an API request.
table = client.get_table(table_id)

# Output
print("Loaded  rows and  columns to ".format(table.num_rows, len(table.schema), table_id))

我收到此错误:BadRequest: 400 Provided Schema does not match Table advanced-analytics-123456:Vahan.rto_data. Cannot add fields (field: __index_level_0__)

我将数据放在一个新表中,看起来查询正在添加一个名为__index_level_0__的随机新列

如何解决此问题,以便将数据附加到现有表中?非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

也许您的数据框中有 __index_level_0__ 列? 尝试删除索引:

df.reset_index(drop=True, inplace=True)

【讨论】:

以上是关于尝试使用 pandas 数据框将数据附加到 BigQuery 表时出错的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用浏览器工具将数据附加到 Google Big 查询中的现有表吗?

使用 pandas 数据框将坐标字符串拆分为 X 和 Y 列

Pandas 数据框将数据聚合为每组的计数

pandas 数据框将 INT64 列转换为布尔值

Pandas 数据框将长字符串列动态操作为 2 列

字典中的 Pandas 数据框将值作为元组返回