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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:22:03