你从系统导出一个Excel,打开一看——几十列数据,一半以上是空白的。A列有数据、B列空、C列空、D列有数据、E列空、F列空、G列空、H列有数据……
你要处理这些数据,但空白列挡在中间,看着就烦。更烦的是,这样的Excel有几十个。
你开始手动删除:选中B列,右键删除;选中C列,右键删除;选中E列,右键删除……几十个文件,每个都要删几十列。一下午没了,眼睛都快瞎了。
我写了30行代码,做了一个事:批量删除Excel中的所有空白列,表格瞬间清爽。
原来:选中空白列 → 右键删除 → 下一个 → 重复几十遍 → 一下午没了现在:运行脚本 → 输入文件夹路径 → 几秒钟搞定
效果展示
清洗前(表格中藏着多个空白列):
清洗后(空白列全部删除):
表格干净整洁,一目了然。
完整代码
import osimport pandas as pddef remove_empty_columns(df, threshold=0):"""删除空白列threshold: 空值比例阈值,0表示全空才删除"""before = len(df.columns)null_ratio = df.isnull().mean()cols_to_drop = null_ratio[null_ratio >= threshold].index.tolist()df_cleaned = df.drop(columns=cols_to_drop)after = len(df_cleaned.columns)return df_cleaned, before - after, cols_to_dropdef batch_remove_empty_columns(folder_path, threshold=0, output_folder="清理后"):excel_files = [f for f in os.listdir(folder_path)if f.lower().endswith(('.xlsx', '.xls'))]if not excel_files:print("❌ 未找到Excel文件")returnprint(f"📂 找到 {len(excel_files)} 个Excel文件")output_path = os.path.join(folder_path, output_folder)os.makedirs(output_path, exist_ok=True)all_reports = []success_count = 0for file in excel_files:file_path = os.path.join(folder_path, file)print(f" 📄 {file}")try:df = pd.read_excel(file_path)original_cols = len(df.columns)cleaned_df, deleted, cols_dropped = remove_empty_columns(df, threshold)output_file = os.path.join(output_path, file)cleaned_df.to_excel(output_file, index=False)success_count += 1print(f" ✅ {original_cols}列 → {len(cleaned_df.columns)}列 (删除{deleted}列)")all_reports.append({'文件名': file,'原始列数': original_cols,'保留列数': len(cleaned_df.columns),'删除列数': deleted})except Exception as e:print(f" ❌ 失败: {str(e)[:40]}")print(f"\n✅ 完成!成功处理 {success_count} 个文件")print(f"📁 保存在: {output_path}")def preview_empty_columns(folder_path):"""预览所有文件的空白列情况"""excel_files = [f for f in os.listdir(folder_path)if f.lower().endswith(('.xlsx', '.xls'))]if not excel_files:print("❌ 未找到Excel文件")returnprint("🔍 扫描空白列...")print("=" * 60)for file in excel_files:file_path = os.path.join(folder_path, file)try:df = pd.read_excel(file_path)null_ratio = df.isnull().mean()empty_cols = null_ratio[null_ratio == 1.0].index.tolist()print(f"\n📄 {file}")print(f" 总列数: {len(df.columns)}")print(f" 全空列: {len(empty_cols)} 列")if empty_cols:print(f" {', '.join(empty_cols[:10])}{'...'iflen(empty_cols) > 10else''}")except Exception as e:print(f"\n📄 {file} ❌ 读取失败")print("\n" + "=" * 60)if __name__ == "__main__":print("=" * 50)print("🗑️ 批量删除Excel空白列")print("=" * 50)print()path = input("请输入Excel文件夹路径: ").strip()if path.startswith('"') and path.endswith('"'):path = path[1:-1]path = path.replace('\\', '/')if not os.path.exists(path):print("❌ 路径不存在")input("按回车键退出...")exit()print("\n1. 预览空白列(不删除)")print("2. 执行删除")choice = input("请选择(1或2,默认2): ").strip() or "2"if choice == "1":preview_empty_columns(path)input("\n按回车键退出...")exit()print("\n删除规则:")print("1. 只删全空列(推荐)")print("2. 删除空值超过50%的列")print("3. 删除空值超过80%的列")rule = input("请选择(默认1): ").strip() or "1"threshold_map = {'1': 0, '2': 0.5, '3': 0.8}threshold = threshold_map.get(rule, 0)batch_remove_empty_columns(path, threshold)input("\n按回车键退出...")
使用步骤
安装依赖:
pip install pandas openpyxl把完整代码保存为
delete_empty_cols.py运行
python delete_empty_cols.py输入Excel文件夹路径
选择「预览」或「执行删除」
选择删除规则
打开同目录下的「清理后」文件夹
踩坑记录
坑1: 有些列看起来是空的,但实际上有空格或隐藏字符。解决方案:pandas的isnull()会正确识别空值,空格不算空值。如果需要删除空格列,配合数据清洗工具一起使用。
还能怎么玩
预览功能:先查看哪些列是空白的,确认后再删除
自定义阈值:删除空值超过50%或80%的列
夜雨聆风