Python 每日一记34>>>pandas多条件筛选,写多sheet的excel

Pandas Excel 多条件筛选与多Sheet保存
本文介绍了使用Pandas进行Excel文件多条件筛选的方法,避免使用and/or等逻辑运算符,并解决了如何将不同数据集保存到同一Excel文件的不同Sheet中的问题。

在今天的工作中,又遇到了一些小问题。都是关于pandas操作excel的。
一是多条件筛选数据,二是将数据写入excel,但是要保存在同一个工作簿的多个sheet。
先上一个完整代码
在这里插入图片描述
源数据是这样的:
在这里插入图片描述
得到的结果是:
在这里插入图片描述
我在做的是,得到不同级距(门槛)下‘人数’,‘占比’,‘达到级距会员客单’,‘会员客单’,并循环保存在同一个工作簿下的不同工作表内。
现在说一下我遇到的问题:
1、pandas多条件筛选
如果我采用下面的代码,就是将&,换为and,就会出现错误,因为在pandas.dataframe的bool筛选时,我们不能使用and和or,只能用&和|
详见https://blog.youkuaiyun.com/wx0628/article/details/87365629
在这里插入图片描述
在这里插入图片描述
2、数据存储在一个工作簿的多个excel
如果我们保存代码的文件写成下面的代码,按理说是可以实现保存在不同sheet的,但是我们会发现,最终我们只得到5000这个级距的,因为前面的文件都被覆盖了,但是如果我们加上writer=pd.ExcelWriter(‘C:\Users\Administrator\Desktop\门槛.xlsx’),再b.to_excel(writer,sheet_name=str(k)),就能实现保存在不同sheet了。
在这里插入图片描述
在这里插入图片描述

<think>我们使用pandas库来处理Excel文件,因为它可以方便地读取sheet,并且支持数据筛选。 步骤: 1. 读取整个Excel文件,获取所有sheet的名称。 2. 遍历每个sheet,读取数据并应用筛选条件(如果有的话)。 3. 将筛选后的数据合并到一个DataFrame中(如果需要)或者单独处理。 注意:筛选条件可以是针对某一的,比如我们只想保留某大于某个值的数据。 示例:假设我们有一个Excel文件,包含sheet,每个sheet都有相同的结构(例如:'姓名', '年龄', '城市')。我们想要从每个sheet筛选出年龄大于30的数据,并将所有筛选后的数据合并到一个新的sheet中。 代码实现如下:</think># 使用Python处理Excel工作表数据并按条件筛选Python中处理包含个工作表的Excel文件并按条件筛选数据,可以使用`pandas`库进行高效的数据操作。以下是完整的解决方案: ## 解决方案步骤 ### 1. 安装所需库 ```bash pip install pandas openpyxl ``` ### 2. 读取Excel文件的所有工作表 ```python import pandas as pd # 读取整个Excel文件的所有工作表 excel_file = pd.ExcelFile('data.xlsx') # 获取所有工作表名称 sheet_names = excel_file.sheet_names print(f"工作簿包含的工作表: {sheet_names}") ``` ### 3. 合并所有工作表数据 ```python # 创建一个空的DataFrame存储所有数据 all_data = pd.DataFrame() # 遍历所有工作表并合并数据 for sheet in sheet_names: df = pd.read_excel(excel_file, sheet_name=sheet) df['来源工作表'] = sheet # 添加来源标识 all_data = pd.concat([all_data, df], ignore_index=True) print(f"合并后的数据行数: {len(all_data)}") ``` ### 4. 按条件筛选数据 ```python # 示例1:筛选销售额大于10000的记录 sales_filtered = all_data[all_data['销售额'] > 10000] # 示例2:筛选特定产品类别的记录 category_filter = all_data[all_data['产品类别'].isin(['电子产品', '办公用品'])] # 示例3:组合条件筛选(销售额>5000且地区为"华东") combined_filter = all_data[ (all_data['销售额'] > 5000) & (all_data['地区'] == '华东') ] # 示例4:日期筛选(2023年之后的数据) date_filter = all_data[all_data['日期'] > '2023-01-01'] ``` ### 5. 高级筛选技巧 ```python # 使用query方法进行复杂筛选 query_result = all_data.query('销售额 > 5000 and 利润率 > 0.2') # 使用loc进行筛选 loc_result = all_data.loc[ (all_data['客户类型'] == 'VIP') & (all_data['销售额'] > all_data['销售目标']) ] # 使用groupby进行筛选 group_result = all_data.groupby('销售区域').filter( lambda x: x['销售额'].mean() > 10000 ) ``` ### 6. 保存筛选结果 ```python # 保存到新Excel文件 with pd.ExcelWriter('筛选结果.xlsx') as writer: sales_filtered.to_excel(writer, sheet_name='高销售额', index=False) category_filter.to_excel(writer, sheet_name='特定类别', index=False) combined_filter.to_excel(writer, sheet_name='组合条件', index=False) # 保存到CSV date_filter.to_csv('2023年后数据.csv', index=False) ``` ## 关键技巧说明 1. **表合并**:使用`pd.concat()`合并个工作表数据,添加`来源工作表`便于追踪数据来源 2. **条件筛选**: - 基本筛选:`df[df['名'] > 值]` - 多条件组合:使用`&`(与)、`|`(或)和`~`(非) - 筛选:`df[df['名'].isin(['值1', '值2'])]` - 日期筛选:直接比较日期字符串 3. **高级筛选**: - `query()`方法:支持类似SQL的查询语法 - `groupby().filter()`:基于组统计结果筛选 - `loc[]`:支持复杂条件表达式和选择 4. **结果导出**: - 使用`ExcelWriter`保存个工作表到同一文件 - 使用`to_csv()`导出为CSV格式 ## 实际应用示例 假设我们有一个销售数据文件`sales_data.xlsx`,包含三个工作表:`Q1`, `Q2`, `Q3`,每个工作表都有以下: - 日期 - 销售区域 - 产品类别 - 销售额 - 利润 ```python # 筛选2023年第二季度华东地区电子产品的销售记录 filtered_data = all_data[ (all_data['日期'].between('2023-04-01', '2023-06-30')) & (all_data['销售区域'] == '华东') & (all_data['产品类别'] == '电子产品') ] # 计算筛选结果的总销售额和平均利润 total_sales = filtered_data['销售额'].sum() avg_profit = filtered_data['利润'].mean() print(f"总销售额: ${total_sales:,.2f}") print(f"平均利润: ${avg_profit:,.2f}") ``` ## 注意事项 1. 处理大型Excel文件时,考虑使用`chunksize`参数块读取 2. 日期使用`pd.to_datetime()`确保正确解析 3. 使用`dtype`参数指定数据类型提高效率 4. 缺失值处理:`dropna()`删除或`fillna()`填充 通过以上方法,您可以高效处理Excel文件中的个工作表,并根据复杂条件筛选所需数据[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值