You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame以.feather格式写入GCS?

问题原因

  • pandas的to_csv()方法无参调用时默认返回CSV格式字符串,可直接传入GCS SDK的upload_from_string方法完成上传,因此你之前的CSV上传逻辑可以正常运行。
  • to_feather()的接口设计与to_csv()不同:它没有无参返回内容的逻辑,必须传入fname参数指定写入目标(本地路径或类文件对象),直接无参调用就会触发必填参数报错。另外feather属于二进制存储格式,你代码中使用的text/feather MIME类型不符合规范,应该使用二进制类型application/octet-stream。

推荐解决方案

方案1:内存缓冲区中转(无需生成本地文件,适合绝大多数场景)

使用Python内置的io.BytesIO作为内存类文件对象承载feather内容,直接上传即可:

import io

# 将Feather格式数据写入内存缓冲区
buffer = io.BytesIO()
dataframe.reset_index().to_feather(buffer)
# 重置缓冲区指针到起始位置,避免上传内容为空
buffer.seek(0)

# 上传到GCS存储桶
blob = bucket.blob(path)
blob.upload_from_file(buffer, content_type='application/octet-stream')

方案2:本地临时文件中转(适合超大数据量、内存不足场景)

如果DataFrame体积过大无法在内存中缓存,可以先写入本地临时文件,上传完成后删除临时文件即可:

import tempfile
import os

# 创建临时文件写入Feather数据
with tempfile.NamedTemporaryFile(suffix='.feather', delete=False) as tmp_file:
    tmp_path = tmp_file.name
    dataframe.reset_index().to_feather(tmp_path)

# 上传临时文件到GCS
blob = bucket.blob(path)
blob.upload_from_filename(tmp_path, content_type='application/octet-stream')

# 上传完成后删除本地临时文件
os.unlink(tmp_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:03