如何在Pandas读取Parquet文件时忽略不存在的列?
解决Pandas读取Parquet时忽略不存在列的问题
要让read_parquet忽略不存在的列,核心思路是先获取目标Parquet文件的实际列名,再和你指定的列名取交集,只读取两者都存在的列,避免因列不存在报错。
修改读取逻辑
替换你原来的读取代码,先通过元数据获取文件列名,再计算有效列:
import pandas as pd import io from fastparquet import ParquetFile # 借助fastparquet读取元数据,无需加载全量数据 def read_data(columns=None, blob_data=None): # 读取Parquet元数据,获取文件实际包含的列名 pf = ParquetFile(io.BytesIO(blob_data.readall())) actual_columns = pf.columns if columns is None: # 无指定列时,读取全部列 data_list = pd.read_parquet(io.BytesIO(blob_data.readall()), engine='fastparquet') else: # 筛选出指定列中实际存在于文件的列 valid_columns = [col for col in columns if col in actual_columns] # 处理无有效列的情况(可根据业务需求调整,比如返回空DF或打印警告) if not valid_columns: data_list = pd.DataFrame() else: data_list = pd.read_parquet(io.BytesIO(blob_data.readall()), columns=valid_columns, engine='fastparquet') return data_list
配合你的列筛选逻辑
你的column_data函数先读全量列、筛选出唯一值>5的列后,后续用这些筛选后的列读取其他日期文件时,上面的逻辑会自动忽略不存在的列,不会再因列不匹配报错。
补充说明
- 用
ParquetFile读取元数据比全量加载数据高效得多,尤其适合大文件场景。 - 如果无有效列,你可以根据业务需求调整处理逻辑,比如打印警告日志、返回默认结构的空DataFrame等。
内容的提问来源于stack exchange,提问作者soft encoder
相关产品推荐
相关产品推荐

