如何在加载到Pandas前筛选Excel数据:仅导入Disabled状态用户
仅加载Excel中Status为"Disabled"的用户到Pandas DataFrame
有两种常见实现方式,可根据数据量选择:
方法一:先读取数据再筛选(适合小数据集)
这种方式简单直观,先读取包含Status列的目标数据,再过滤符合条件的行:
import pandas as pd # 读取指定列(用列名更稳妥,避免列位置变动) df = pd.read_excel('Users.XLSX', sheet_name='WebUsers', usecols=["A", "B", "Status"]) # 筛选Status为Disabled的记录 df_disabled = df[df['Status'] == 'Disabled'] # 若不需要保留Status列,可删除 df_disabled = df_disabled.drop(columns=['Status']) print(df_disabled)
如果知道Status列的位置(比如是C列),也可以把usecols写成"A,B,C",效果一致。
方法二:逐行筛选后加载(适合大数据集)
如果Excel文件很大,全量加载会占用过多内存,可借助openpyxl引擎逐行读取并筛选:
import pandas as pd from openpyxl import load_workbook # 以只读模式加载工作簿 wb = load_workbook('Users.XLSX', read_only=True) ws = wb['WebUsers'] # 获取表头并定位Status列的位置 headers = [cell.value for cell in ws[1]] status_col_idx = headers.index('Status') # 收集符合条件的A、B列数据 filtered_data = [] for row in ws.iter_rows(min_row=2, values_only=True): if row[status_col_idx] == 'Disabled': # 提取A、B列对应的数据(假设A是第0位,B是第1位) filtered_data.append([row[0], row[1]]) # 转换为DataFrame df_disabled = pd.DataFrame(filtered_data, columns=[headers[0], headers[1]]) print(df_disabled) # 关闭工作簿 wb.close()
内容的提问来源于stack exchange,提问作者Behseini
相关产品推荐
相关产品推荐

