乐于分享
好东西不私藏

Excel几十列空白列看得眼瞎?30行代码一键删除,表格瞬间清爽

Excel几十列空白列看得眼瞎?30行代码一键删除,表格瞬间清爽

你从系统导出一个Excel,打开一看——几十列数据,一半以上是空白的。A列有数据、B列空、C列空、D列有数据、E列空、F列空、G列空、H列有数据……

你要处理这些数据,但空白列挡在中间,看着就烦。更烦的是,这样的Excel有几十个。

你开始手动删除:选中B列,右键删除;选中C列,右键删除;选中E列,右键删除……几十个文件,每个都要删几十列。一下午没了,眼睛都快瞎了。

我写了30行代码,做了一个事:批量删除Excel中的所有空白列,表格瞬间清爽。

原来:选中空白列 → 右键删除 → 下一个 → 重复几十遍 → 一下午没了现在:运行脚本 → 输入文件夹路径 → 几秒钟搞定

效果展示

清洗前(表格中藏着多个空白列):

序号
姓名
(空)
(空)
手机号
(空)
销售额
(空)
(空)
1
张三
139****
120000
2
李四
158****
85000
3
王五
137****
200000

清洗后(空白列全部删除):

序号
姓名
手机号
销售额
1
张三
139****
120000
2
李四
158****
85000
3
王五
137****
200000

表格干净整洁,一目了然。

完整代码

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文件")        return    print(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 = 0    for 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 += 1            print(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文件")        return    print("🔍 扫描空白列...")    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按回车键退出...")

使用步骤

  1. 安装依赖:pip install pandas openpyxl

  2. 把完整代码保存为 delete_empty_cols.py

  3. 运行 python delete_empty_cols.py

  4. 输入Excel文件夹路径

  5. 选择「预览」或「执行删除」

  6. 选择删除规则

  7. 打开同目录下的「清理后」文件夹

踩坑记录

坑1: 有些列看起来是空的,但实际上有空格或隐藏字符。解决方案:pandas的isnull()会正确识别空值,空格不算空值。如果需要删除空格列,配合数据清洗工具一起使用。

还能怎么玩

  • 预览功能:先查看哪些列是空白的,确认后再删除

  • 自定义阈值:删除空值超过50%或80%的列