`glob` 模块用于文件路径匹配,以及 `pandas`(通常简写为 `pd`)用于数据处理
glob模块用于文件路径匹配,以及pandas(通常简写为pd)用于数据处理。这是一个常见的 Python 数据分析起始组合,常用于批量读取 CSV、Excel 等格式的文件。
例如,典型用法如下:
# 获取当前目录下所有 .csv 文件路径csv_files=glob("*.csv")# 逐个读取并合并为一个 DataFramedf_list=[pd.read_csv(f)forfincsv_files]combined_df=pd.concat(df_list,ignore_index=True)注意:glob返回的是字符串列表(文件路径),不自动递归子目录(如需递归,可用glob("**/*.csv", recursive=True));pandas需确保已正确安装(pip install pandas),且文件编码、分隔符等需与实际数据匹配,否则读取可能报错。
当多个 CSV 文件列名不一致时,pd.concat()的默认行为是执行“并集”对齐(outer join):
- 所有出现过的列名都会保留在结果 DataFrame 中(缺失列处填充
NaN); - 行数据按列名对齐,未匹配的列自动补
NaN; - 若设置
join='inner',则只保留所有文件中共有的列名(交集),其余列被丢弃; - 若列名完全无交集,结果将包含全部列,但每行仅在其原始文件对应列上有值,其余全为
NaN。
⚠️ 风险提示:
- 列名大小写/空格/不可见字符差异(如
"Name"vs"name ")会被视为不同列,导致意外冗余或NaN; - 相同语义但不同列名(如
"user_id"和"id")不会自动合并,需预先标准化; - 数据类型可能因列缺失而强制转为
object或float64(含NaN时整型列会升为浮点)。
✅ 安全合并推荐步骤:
importpandasaspdfromglobimportglob csv_files=glob("*.csv")dfs=[]forfincsv_files:df=pd.read_csv(f)# ✅ 步骤1:统一列名(如转小写、去首尾空格、替换特殊字符)df.columns=df.columns.str.strip().str.lower().str.replace(r'[^a-z0-9_]','_',regex=True)# ✅ 步骤2:可选——显式指定一致的列顺序与默认值(增强可控性)expected_cols=["id","name","age","city"]# 按业务定义标准 schemaforcolinexpected_cols:ifcolnotindf.columns:df[col]=pd.NA# 或 None / np.nan,保持类型一致性df=df[expected_cols]# 强制列顺序dfs.append(df)# ✅ 步骤3:concat 并统一 dtypes(可选)combined=pd.concat(dfs,ignore_index=True,sort=False)combined=combined.convert_dtypes()# 启用 nullable 类型(如 Int64, string)补充技巧:
- 使用
pd.concat(..., verify_integrity=True)可检测重复索引(非必需,但调试时有用); - 对超大文件,建议分批读取 +
dtype预设以节省内存; - 生产环境强烈建议添加
try...except包裹单个read_csv,记录失败文件便于排查。
