将MongoDB数据导入BigQuery时CSV编码类型错误求助
解决Python2.7下pandas to_csv写入StringIO的TypeError问题
这个错误的核心原因是Python2.7里io.StringIO只接受unicode类型数据,但你指定encoding='utf-8'调用df.to_csv()时,pandas输出的是UTF-8编码的字节串(str类型),两者类型不匹配导致报错。
直接修改以下两处即可解决:
- 将
io.StringIO()替换为io.BytesIO(),BytesIO专门用于处理字节流,和pandas输出的编码后内容匹配 - 无需调整BigQuery的
load_table_from_file调用,它可以直接处理BytesIO流
修改后的关键代码片段:
import io import pandas as pd # ... 前面的MongoDB数据读取逻辑不变 ... df = pd.DataFrame(data, columns=["_id", "account_id", "limit", "products"]) # 替换StringIO为BytesIO csv_file = io.BytesIO() # 保留encoding参数,确保输出UTF-8编码的字节流 df.to_csv(csv_file, index=False, encoding='utf-8') csv_file.seek(0) bigquery_client.load_table_from_file(csv_file, table).result() client.close() client_bq.close()
补充:如果后续有机会升级到Python3,这个问题会自动消失——Python3的StringIO和BytesIO区分更清晰,且pandas的to_csv在Python3下的行为更统一。
内容的提问来源于stack exchange,提问作者CoderCoder42
相关产品推荐
相关产品推荐

