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

MacOS读取Parquet文件时列表列显示为None,Windows下正常

问题排查与解决方案

1. 对齐Parquet读取库的版本

Windows和Mac环境下pandas/pyarrow(或fastparquet)的版本差异,是列表列反序列化失败的常见原因:

  • 先查看当前Mac环境的库版本:
    pip show pandas pyarrow fastparquet
    
  • 将Mac上的库版本对齐到Windows能正常运行的版本,比如Windows用pandas==2.1.4+pyarrow==14.0.2,执行:
    pip install pandas==2.1.4 pyarrow==14.0.2 --force-reinstall
    
  • 若使用fastparquet作为读取引擎,同样需要对齐版本。

2. 对比正常/异常文件的Schema

利用那个能正常读取的文件作为基准,用pyarrow查看两者的Schema差异:

import pyarrow.parquet as pq

# 输出正常文件的Schema
normal_pq = pq.ParquetFile("path/to/normal_file.parquet")
print("正常文件Schema:\n", normal_pq.schema)

# 输出异常文件的Schema
abnormal_pq = pq.ParquetFile("path/to/abnormal_file.parquet")
print("\n异常文件Schema:\n", abnormal_pq.schema)

重点检查bidprices/bidsizes等列的类型定义,若异常文件的列表列为optional list<float>而正常文件是必填类型,可尝试强制指定Schema读取:

import pandas as pd
from pyarrow import list_, float64

custom_schema = {
    "bidprices": list_(float64()),
    "bidsizes": list_(float64()),
    "askprices": list_(float64()),
    "asksizes": list_(float64()),
    # 补充其他列的类型定义
}

df = pd.read_parquet("path/to/abnormal_file.parquet", schema=custom_schema, engine="pyarrow")

3. 排查MacOS环境兼容性

MacOS Sequoia的系统库可能和Python 3.9.6存在依赖冲突:

  • 用conda创建独立隔离环境测试:
    conda create -n parquet_test python=3.9.6 pandas pyarrow
    conda activate parquet_test
    
  • 若之前仅升级Python未完全重装,建议彻底卸载旧版本后重新安装Python 3.10+,再重新部署依赖库。

4. 绕开Pandas直接解析数据

如果是Pandas转换环节出问题,直接用pyarrow读取后再转DataFrame:

import pyarrow.parquet as pq

# 用pyarrow读取表数据
table = pq.read_table("path/to/abnormal_file.parquet")
# 验证列表列是否能正常读取
print(table["bidprices"].to_pylist()[:5])

# 转换为DataFrame时禁用可空类型
df = table.to_pandas(use_nullable_dtypes=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:37