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

如何让pd.read_parquet的columns参数支持不区分大小写的列过滤?

实现Parquet文件不区分大小写的列过滤

由于pd.read_parquet的columns参数仅接受列名列表,不支持可调用对象,我们可以通过先读取文件元数据获取列名,再做大小写匹配的方式实现需求,全程无需加载全量数据:

方法1:使用PyArrow引擎(Pandas默认引擎)

import pandas as pd
import pyarrow.parquet as pq

# 定义你需要的目标列(统一转小写)
target_cols = {"user_id", "order_date", "total_amount"}

# 读取Parquet文件的元数据,提取所有列名
parquet_meta = pq.ParquetFile("your_data.parquet")
all_file_cols = [col.name for col in parquet_meta.schema]

# 匹配不区分大小写的列:将文件列名转小写后和目标列对比
matching_cols = [col for col in all_file_cols if col.lower() in target_cols]

# 读取指定列
df = pd.read_parquet("your_data.parquet", columns=matching_cols)

方法2:使用FastParquet引擎

如果项目中用的是fastparquet作为读取引擎,代码逻辑类似:

import pandas as pd
from fastparquet import ParquetFile

target_cols = {"user_id", "order_date", "total_amount"}

# 获取文件列名
pf = ParquetFile("your_data.parquet")
all_file_cols = pf.columns

# 匹配列
matching_cols = [col for col in all_file_cols if col.lower() in target_cols]

# 读取数据
df = pd.read_parquet("your_data.parquet", columns=matching_cols, engine="fastparquet")

批量处理多文件

如果要处理一批Parquet文件,可以循环遍历每个文件,重复上述逻辑读取后再合并:

import os
import pandas as pd
import pyarrow.parquet as pq

target_cols = {"user_id", "order_date", "total_amount"}
data_dir = "path/to/parquet_files"
dfs = []

for file in os.listdir(data_dir):
    if file.endswith(".parquet"):
        file_path = os.path.join(data_dir, file)
        # 获取列名并匹配
        parquet_meta = pq.ParquetFile(file_path)
        all_file_cols = [col.name for col in parquet_meta.schema]
        matching_cols = [col for col in all_file_cols if col.lower() in target_cols]
        # 读取数据
        df = pd.read_parquet(file_path, columns=matching_cols)
        dfs.append(df)

# 合并所有数据
final_df = pd.concat(dfs, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:05:13