如何使用Polars扫描存在缺失列的多个CSV文件?
处理Polars扫描多CSV时缺失列的填充问题
你可以通过两种简洁的方式处理缺失列,自动填充None或指定默认值:
方法一:用default()方法快速处理(推荐)
Polars的default()方法能直接为不存在的列指定默认值,无需手动判断列是否存在:
import polars as pl import glob # 定义需要提取的目标列 target_cols = ['Date', 'ID', 'colA', 'Column A', 'columnA'] queries = [] for file in glob.glob("*.csv"): # 扫描文件时,对每个目标列设置默认值为None df_scan = pl.scan_csv(file, ignore_errors=True).select( [pl.col(col).default(None) for col in target_cols] ) queries.append(df_scan) # 按列名对齐合并所有结果 combined_df = pl.concat(queries, how="diagonal").collect()
方法二:手动判断并添加缺失列
如果你需要更灵活的控制(比如不同列用不同默认值),可以先获取文件列名,动态添加缺失列:
import polars as pl import glob target_cols = ['Date', 'ID', 'colA', 'Column A', 'columnA'] queries = [] for file in glob.glob("*.csv"): df_scan = pl.scan_csv(file, ignore_errors=True) current_cols = df_scan.columns # 遍历目标列,不存在则添加对应默认值 for col in target_cols: if col not in current_cols: # 这里可以替换成你需要的默认值(比如""、0等) df_scan = df_scan.with_columns(pl.lit(None).alias(col)) # 只保留目标列 df_scan = df_scan.select(target_cols) queries.append(df_scan) combined_df = pl.concat(queries, how="diagonal").collect()
关键提示
- 替换
None为其他值(如""、0)即可实现自定义默认值填充 how="diagonal"会自动按列名对齐合并,无需担心文件列顺序不一致- 用列表收集扫描结果再合并,比反复拼接空LazyFrame更高效
内容的提问来源于stack exchange,提问作者pinpss
相关产品推荐
相关产品推荐

