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_table | str | BigQuery 表的名称,格式为 dataset.table_name |
project_id | str | Google Cloud 项目 ID,若未指定,会自动检测 |
chunksize | int | 分批写入的行数,避免一次性上传大数据量 |
reauth | bool,默认 False | 是否重新认证用户 |
if_exists | {‘fail’, ‘replace’, ‘append’}, 默认 'fail' | 表已存在时的行为: - 'fail' : 抛出异常- 'replace' : 删除原表并创建新表- 'append' : 追加写入 |
auth_local_webserver | bool,默认 True | 是否使用本地 Web 服务器进行身份验证 |
table_schema | list of dicts | 自定义表结构,如字段名、类型等,格式参考 BigQuery schema |
location | str | BigQuery 数据集所在区域(如 'US' , 'EU' ) |
progress_bar | bool,默认 True | 是否显示上传进度条 |
credentials | google.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 使用 | 序列化保存 |