如何在读取多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
相关产品推荐
相关产品推荐

