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

如何在读取多Parquet文件到Pandas时跳过缺失指定列的文件

解决Parquet文件缺失指定列时的跳过方法

可以通过两种方式跳过缺失指定列的Parquet文件,以下是具体实现:

方法一:提前检查文件列结构

先读取每个Parquet文件的schema,确认所需列全部存在后再读取数据,避免报错。这种方式需要依赖pyarrow或fastparquet库(pandas读取Parquet的底层引擎)。

import pandas as pd
import pyarrow.parquet as pq  # 若用fastparquet则替换为import fastparquet as fp

li = []
required_cols = set(list_key_cols_aggregates)

for filename in parquet_filtered_list:
    # 获取文件schema
    try:
        # pyarrow方式
        schema = pq.read_schema(filename)
        file_cols = set(schema.names)
        # fastparquet方式:替换为 fp.ParquetFile(filename).columns
    except Exception as e:
        print(f"读取文件{filename}的schema失败: {str(e)}")
        continue
    
    # 检查所需列是否全部存在
    if required_cols.issubset(file_cols):
        df = pd.read_parquet(filename, columns=list_key_cols_aggregates)
        li.append(df)
    else:
        missing_cols = required_cols - file_cols
        print(f"跳过文件{filename}: 缺失列 {missing_cols}")

df_raw_2021_to_2022 = pd.concat(li, axis=0, ignore_index=False)
del li

方法二:捕获读取异常直接跳过

直接尝试读取文件,若因列缺失报错则跳过该文件,继续处理下一个。这种方式无需额外检查步骤,代码更简洁。

import pandas as pd

li = []

for filename in parquet_filtered_list:
    try:
        df = pd.read_parquet(filename, columns=list_key_cols_aggregates)
        li.append(df)
    except ValueError as e:
        # 匹配列缺失的错误信息,确保只跳过这类错误
        if "does not contain column" in str(e):
            print(f"跳过文件{filename}: {str(e)}")
        else:
            # 其他ValueError抛出,不忽略
            raise e
    except Exception as e:
        # 处理其他可能的异常(如文件损坏等)
        print(f"处理文件{filename}时出错: {str(e)}")
        continue

df_raw_2021_to_2022 = pd.concat(li, axis=0, ignore_index=False)
del li

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:35:26