当前位置:迷你笔记 » 技术 » 当指定列都为空时通过Python删除整列

当指定列都为空时通过Python删除整列

确保Python已安装依赖项:pandasopenpyxl

pip install pandas openpyxl

把以下代码保存为filter_rows_by_columns.py文件

import pandas as pd

def filter_rows_by_columns(file_path, sheet_name, column_names, output_file=None):
    """
    过滤 Excel 文件的行,仅保留指定两列中任一单元格不为空的行。
    空值包括 NaN、None、空字符串、仅含空白字符的字符串。
    
    参数:
        file_path (str): 输入 Excel 文件路径
        sheet_name (str): 工作表名称
        column_names (list): 要检查的列名列表(例如 ["Image Src", "Variant Image"])
        output_file (str, optional): 输出文件路径,默认为覆盖原文件
    """
    # 读取 Excel 文件
    try:
        df = pd.read_excel(file_path, sheet_name=sheet_name)
    except Exception as e:
        print(f"读取 Excel 文件失败: {e}")
        return
    
    # 检查列是否存在
    for col in column_names:
        if col not in df.columns:
            print(f"错误: 列 '{col}' 不存在于工作表 '{sheet_name}' 中")
            print("可用列名:", df.columns.tolist())
            return
    
    # 调试:打印列名和前几行数据
    #print("列名:", df.columns.tolist())
    #print("检查的列:", column_names)
    #print("前5行数据:\n", df[column_names].head(5).to_string())
    
    # 定义空值检测函数
    def is_empty(value):
        if pd.isna(value):  # 检查 NaN/None
            return True
        str_value = str(value).strip()  # 转换为字符串并去除首尾空白
        return str_value == ""  # 仅空字符串或全空白视为“空”
    
    # 创建掩码:保留任一列不为空的行
    mask = False
    for col in column_names:
        mask |= ~df[col].apply(is_empty)  # 非空值的行
    filtered_df = df[mask]
    
    # 调试:打印行数统计
    print(f"原始行数: {len(df)}")
    print(f"保留行数: {len(filtered_df)}")
    print(f"删除行数: {len(df) - len(filtered_df)}")
    
    # 调试:打印被删除的行(两列均为空)
    #deleted_rows = df[~mask][column_names]
    #if not deleted_rows.empty:
    #    print("被删除的行(两列均为空):\n", deleted_rows.to_string())
    #else:
    #    print("没有行被删除(没有两列均为空的行)")
    
    # 保存结果
    if output_file is None:
        output_file = file_path
    try:
        filtered_df.to_excel(output_file, sheet_name=sheet_name, index=False)
        print(f"处理完成!已保留任一列不为空的行,结果保存到 {output_file}")
    except Exception as e:
        print(f"保存 Excel 文件失败: {e}")

# 示例用法
if __name__ == "__main__":
    file_path = r"C:\Users\XXX\Downloads\output.xlsx"  # 输入 Excel 文件路径
    sheet_name = "Sheet1"  # 工作表名称
    column_names = ["Image Src", "Variant Image"]  # 要检查的列名
    output_file = r"C:\Users\XXX\Downloads\filtered_output.xlsx"  # 输出文件路径

    filter_rows_by_columns(file_path, sheet_name, column_names, output_file)
未经允许不得转载:迷你笔记 » 当指定列都为空时通过Python删除整列

相关文章

评论 (0)

7 + 9 =