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

使用Pandas读取分区Parquet文件时出现“Cannot yet unify dictionaries with nulls”错误的解决方法咨询

Pandas读取分区Parquet文件时出现“Cannot yet unify dictionaries with nulls”错误的解决方法咨询

我最近碰到个棘手的问题:想用df = pd.read_parquet(basepath_to_files)读取分区Parquet文件,结果触发了报错:ArrowInvalid: Cannot yet unify dictionaries with nulls。但奇怪的是,读取同一份数据的单个非分区Parquet文件时却完全正常,想请教大家该怎么顺利加载这份分区数据?


以下是几个亲测实用的解决思路,你可以挨个试试:

  • 切换读取引擎为fastparquet
    这个报错其实是PyArrow引擎在处理带空值的字典类型分区数据时的兼容性问题,换用fastparquet引擎通常能绕开这个坑。先确保你已经安装了依赖:

    pip install fastparquet
    

    然后修改读取代码就行:

    df = pd.read_parquet(basepath_to_files, engine='fastparquet')
    
  • 手动遍历合并单个分区文件
    如果换引擎行不通,那可以直接遍历所有分区文件,逐个读取后再合并成完整的DataFrame:

    import pandas as pd
    import os
    
    basepath = "你的分区文件根路径"
    # 筛选出所有parquet格式的分区文件
    parquet_files = [
        os.path.join(basepath, filename)
        for filename in os.listdir(basepath)
        if filename.endswith('.parquet')
    ]
    
    # 逐个读取并收集数据
    df_parts = []
    for file in parquet_files:
        df_part = pd.read_parquet(file)
        df_parts.append(df_part)
    
    # 合并所有分区数据
    df = pd.concat(df_parts, ignore_index=True)
    
  • 预处理统一字典类型
    问题的根源是不同分区的字典类型(比如部分分区列含空值、部分不含)无法被PyArrow统一。你可以先对每个分区的目标列转换类型,再合并:

    df_parts = []
    for file in parquet_files:
        df_part = pd.read_parquet(file)
        # 假设存在问题的列名为target_column,转换为字符串类型(或你需要的其他类型)
        df_part['target_column'] = df_part['target_column'].astype(str)
        df_parts.append(df_part)
    
    df = pd.concat(df_parts, ignore_index=True)
    

备注:内容来源于stack exchange,提问作者Gonzalo Plaza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:59:35