Pandas读写Parquet文件报错:类型转换失败,需逐个处理列?
解决Parquet读写时的ArrowTypeError问题
错误原因
报错指向gtis_per_league列——这列是object类型,但内部混合了**字节(bytes)和整数(int)**两种数据类型,pyarrow在序列化Parquet文件时无法统一该列的类型,因此抛出转换错误。
不需要处理所有列,只修复出问题的列即可
步骤1:确认列内的数据类型分布
先运行以下代码,明确该列具体包含哪些数据类型:
print(file['gtis_per_league'].apply(type).value_counts())
步骤2:统一该列的数据类型
根据业务需求选择一种方案:
- 方案1:将整数转为字节类型(如果业务需要保留字节格式)
def int_to_bytes(val): if isinstance(val, int): return str(val).encode('utf-8') return val file['gtis_per_league'] = file['gtis_per_league'].apply(int_to_bytes)
- 方案2:将字节转为整数类型(如果字节是数字的编码形式)
def bytes_to_int(val): if isinstance(val, bytes): return int(val.decode('utf-8')) return val file['gtis_per_league'] = file['gtis_per_league'].apply(bytes_to_int)
- 方案3:统一转为字符串类型(快速解决,适合对格式要求不高的场景)
file['gtis_per_league'] = file['gtis_per_league'].astype(str)
步骤3:重新写入Parquet文件
处理完该列后,直接执行原写入代码即可:
file.to_parquet("/Users/hazout/mysuer/output.parquet")
内容的提问来源于stack exchange,提问作者Nathan H
相关产品推荐
相关产品推荐

