如何使用Polars将文件名添加至新列,标识多文件读取的数据?
给Polars数据集添加文件名标识列
直接用scan_csv读取glob匹配的多文件不会自动带上来源文件名,得手动给每个文件单独加列再合并,给你改好的代码:
import polars as pl from glob import glob import os # 获取所有符合格式的文件路径 file_paths = glob("data/file_*.tsv") # 逐个文件生成带文件名列的懒加载DataFrame lazy_dfs = [ pl.scan_csv(path, separator="\t", has_header=False) # 可二选一:存完整路径或仅存文件名 .with_columns(file_full_path=pl.lit(path)) .with_columns(file_name=pl.lit(os.path.basename(path))) for path in file_paths ] # 合并所有文件的数据,再取前500行 combined_data = pl.concat(lazy_dfs).fetch(n_rows=500)
关键点说明:
- 先用
glob拿到所有目标文件的路径,避免直接用scan_csv读多文件时无法区分数据来源 - 对每个文件单独创建懒加载DataFrame,用
pl.lit()将路径/文件名作为常量列插入 - 最后用
pl.concat合并所有数据集,再按需执行fetch或collect
如果不需要完整路径,只保留文件名的话,删掉file_full_path对应的代码行即可。
内容的提问来源于stack exchange,提问作者sahuno
相关产品推荐
相关产品推荐

