确保Python
已安装依赖项:pandas
和openpyxl
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)