【Pandas】pandas DataFrame to_gbq

Pandas2.2 DataFrame

Serialization IO conversion

方法描述
DataFrame.from_dict(data[, orient, dtype, …])用于从 字典(dict) 构建 DataFrame 的类方法
DataFrame.from_records(data[, index, …])用于将 结构化数据(如列表的元组、NumPy 结构化数组)转换为 DataFrame
DataFrame.to_orc([path, engine, index, …])用于将 DataFrame 保存为 ORC(Optimized Row Columnar)格式的文件
DataFrame.to_parquet([path, engine, …])用于将 DataFrame 写入 Parquet 文件格式的方法
DataFrame.to_pickle(path, *[, compression, …])用于将 DataFrame 对象序列化并保存为 pickle 文件的方法
DataFrame.to_csv([path_or_buf, sep, na_rep, …])用于将 DataFrame 写入 CSV(逗号分隔值)文件的方法
DataFrame.to_hdf(path_or_buf, *, key[, …])用于将 DataFrame 写入 HDF5 文件的方法
DataFrame.to_sql(name, con, *[, schema, …])用于将 DataFrame 写入 SQL 数据库的方法
DataFrame.to_dict([orient, into, index])用于将 DataFrame 转换为 Python 字典
DataFrame.to_excel(excel_writer, *[, …])用于将 DataFrame 写入 Excel 文件的方法
DataFrame.to_json([path_or_buf, orient, …])用于将 DataFrame 转换为 JSON 格式的方法
DataFrame.to_html([buf, columns, col_space, …])用于将 DataFrame 转换为 HTML 表格的方法
DataFrame.to_feather(path, **kwargs)用于将 DataFrame 写入 Feather 文件格式 的方法
DataFrame.to_latex([buf, columns, header, …])用于将 DataFrame 对象转换为 LaTeX 表格的字符串形式
DataFrame.to_stata(path, *[, convert_dates, …])用于将 DataFrame 写入 Stata.dta 文件格式
DataFrame.to_gbq(destination_table, *[, …])用于将 DataFrame 写入 Google BigQuery 数据库

pandas.DataFrame.to_gbq()

pandas.DataFrame.to_gbq() 是 Pandas 提供的一个方法,用于将 DataFrame 写入 Google BigQuery 数据库。该方法基于 pandas-gbq 包,支持将结构化数据直接上传到 Google Cloud 平台上的 BigQuery 表中,适用于数据分析、ETL 流程、数据可视化等场景。


📌 方法签名
DataFrame.to_gbq(
    destination_table,
    *,
    project_id=None,
    chunksize=None,
    reauth=False,
    if_exists='fail',
    auth_local_webserver=True,
    table_schema=None,
    location=None,
    progress_bar=True,
    credentials=None
)

🔍 参数说明
参数名类型描述
destination_tablestrBigQuery 表的名称,格式为 dataset.table_name
project_idstrGoogle Cloud 项目 ID,若未指定,会自动检测
chunksizeint分批写入的行数,避免一次性上传大数据量
reauthbool,默认 False是否重新认证用户
if_exists{‘fail’, ‘replace’, ‘append’}, 默认 'fail'表已存在时的行为:
- 'fail': 抛出异常
- 'replace': 删除原表并创建新表
- 'append': 追加写入
auth_local_webserverbool,默认 True是否使用本地 Web 服务器进行身份验证
table_schemalist of dicts自定义表结构,如字段名、类型等,格式参考 BigQuery schema
locationstrBigQuery 数据集所在区域(如 'US', 'EU'
progress_barbool,默认 True是否显示上传进度条
credentialsgoogle.auth.credentials.Credentials自定义身份验证凭据,可用于服务账户等高级场景

✅ 示例及结果
示例 1:基础用法(写入 BigQuery 表)
import pandas as pd

# 创建示例 DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [70000, 80000, 90000]
})

# 写入 BigQuery 表
df.to_gbq(
    destination_table='my_dataset.my_table',
    project_id='my-project-id',
    if_exists='replace'
)

⚠️ 说明:

  • 首次运行会打开浏览器进行 OAuth2 认证(默认使用用户凭据)。
  • 成功上传后,可在 BigQuery 控制台查看 my_dataset.my_table 表。

示例 2:追加写入已有表(if_exists='append'
# 新增一行数据
new_row = pd.DataFrame({
    'Name': ['David'],
    'Age': [28],
    'Salary': [75000]
})

# 追加写入已有表
new_row.to_gbq(
    destination_table='my_dataset.my_table',
    project_id='my-project-id',
    if_exists='append'
)

结果:

  • my_dataset.my_table 表新增一行数据。
  • 适用于增量更新或数据聚合场景。

示例 3:使用服务账户凭据(适用于自动化脚本)
from google.oauth2 import service_account
import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
    'Product': ['Laptop', 'Phone', 'Tablet'],
    'Price': [1200, 800, 400]
})

# 加载服务账户凭据
credentials = service_account.Credentials.from_service_account_file(
    'path/to/service-account.json'
)

# 写入 BigQuery 表
df.to_gbq(
    destination_table='my_dataset.products',
    project_id='my-project-id',
    if_exists='replace',
    credentials=credentials
)

说明:

  • 适用于服务器端或定时任务,无需手动登录。
  • 需提前创建服务账户并下载 JSON 凭据文件。

示例 4:指定表结构(table_schema
# 自定义表结构
table_schema = [
    {'name': 'Name', 'type': 'STRING'},
    {'name': 'Age', 'type': 'INTEGER'},
    {'name': 'Salary', 'type': 'FLOAT'}
]

# 写入 BigQuery 并指定 schema
df.to_gbq(
    destination_table='my_dataset.my_table',
    project_id='my-project-id',
    if_exists='replace',
    table_schema=table_schema
)

说明:

  • 可控制字段类型、是否允许空值等。
  • 适用于需要严格数据类型定义的场景。

示例 5:分块写入大数据集(chunksize
# 创建大数据集
df_large = pd.concat([df] * 10000)

# 分块写入,每批 1000 行
df_large.to_gbq(
    destination_table='my_dataset.large_table',
    project_id='my-project-id',
    if_exists='replace',
    chunksize=1000
)

优点:

  • 避免内存溢出。
  • 适用于百万级以上数据上传。

示例 6:指定地理区域(location
# 指定数据集所在区域(如 'EU')
df.to_gbq(
    destination_table='my_dataset.my_table',
    project_id='my-project-id',
    if_exists='replace',
    location='EU'
)

说明:

  • 若数据集位于特定区域(如 EU),必须指定 location 参数。

⚠️ 注意事项
  • 需要安装依赖包:
pip install pandas-gbq google-cloud-bigquery
  • 首次运行会提示登录并授权访问 Google Cloud。
  • 推荐使用服务账户凭据进行自动化操作。
  • 支持 chunksize 分批写入,适用于大数据集。
  • table_schema 可用于定义字段类型、精度、是否允许空值等。
  • if_exists='replace' 会删除已有表并重建,慎用。
  • if_exists='append' 适用于增量写入,但要求表结构一致。
  • 上传前建议先在 BigQuery 中创建 Dataset。

📝 总结
特性说明
方法名DataFrame.to_gbq()
输入DataFrame
输出Google BigQuery 表
主要用途将 DataFrame 数据上传到 BigQuery,用于数据分析、BI、可视化等
支持功能替换/追加写入、自定义表结构、分块写入、服务账户认证
推荐场景数据分析、ETL 流程、BI 报表生成、数据可视化
推荐用途数据入库、数据聚合、数据可视化、跨平台数据共享

🔁 与其他格式对比
格式优点缺点推荐用途
BigQuery支持云端存储、可扩展性强、支持 SQL 查询依赖 Google Cloud云端数据分析
CSV通用性强、易读不支持元数据、压缩率低人工可读导出
Parquet高效列式存储、支持压缩无法直接编辑大数据分析
Feather快速读写、跨语言支持不支持复杂结构中间数据缓存
Pickle保留所有 Python 结构仅限 Python 使用序列化保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值