Python pandas将excel的数据按月份分组求平均

先观察一下要处理的数据是怎样的,原始文件是有五组分隔开的数据,第一行是表示组名,第二行是列标签,第三行开始才是真正的数据。很容易就会想到使用pandas来处理这个文件了。
在这里插入图片描述
首先读取文件并创建一个dataframe对象

import pandas as pd
df = pd.read_excel('use_nofillvalue(1).xlsx')

查看df的内容,可以看到列标签很多都是Unamed,是因为本来文件表格就是空的,因此也读取不到内容。而后面使用mean()求平均时,要使用标签Year和Month来进行分组,因此,要先将这个dataframe里面的第一行数据转换成列标签,再将这一行删除。

添加一下代码进行替换

label = list(df.iloc[0])
data = df.drop([0])
data.columns = label

替换后的dataframe内容就是这样子的

按道理来说,就可以直接使用mean()函数进行求平均了,通过下面这行代码

aver = data.groupby(['Year', 'Month']).mean()

但程序立马就报错了,通过查找发现原来是在使用groupby()函数的时候,是按照先对于Year标签分组,再根据Month标签分组,而我的数据里面,有不止一组Year和Month,也就是有重复的列,因此无法判断该按哪一组进行分组。
所以现在需要将除了一组Year和Month保留,其他的都要去掉。如果直接使用drop()函数,会把所有的Year和Month都删除,我也没找到能按索引来删除列的方法。那只能从根源入手了,在读取文件的时候,就把那些不需要的列排除在外。

将最开始的读取文件那一行代码替换成下面这段代码

import numpy as np
read_num = [] 
for i in range(41):
    read_num.append(i)
drop_list = [2, 7, 8, 9, 10, 16, 17, 18, 19, 25, 26, 27, 28, 33, 34, 35, 36]  # 不需要读取的excel列号
read_num = np.delete(read_num, drop_list)
df = pd.read_excel(io='use_nofillvalue(1).xlsx', usecols=read_num)

数据data就会变成这样

此时数据已经清洗完毕了,再运行一次代码。再次报错,没有要聚合的数字类型。可是查看dataframe的内容时,明明数据都没有错,这究竟是groupby()函数还是mean()函数出了问题?

我替换成求总和sum()试了一下,发现是可以计算的。那么就是mean()函数的问题了。

aver = data.groupby(['Year', 'Month']).sum()

我又去查,为什么我的mean()函数用不了。看到一个说法就是,
有可能是这个dataframe的列dtypes为object,而sum()函数可以对非数值进行计算,只要这个计算对这个数据类型有意义;但mean()函数不行,只能对数值进行计算。然后我查看了下data的dtypes,还真的全是object类型。

那么现在的问题就是要将这些数据转换成float型了,尝试了pd.to_numeric和val方法,但是转得都不成功。干脆就不用pandas的函数了,直接使用强制转换.astype(‘float’),然后数据类型就转换好了。
但这里又出现了一个问题,原来data只有24列,而现在a有62列,说明这里还有问题。

a = data[label].astype('float')
我又想起列名重复的问题,我统计了一下,重复的列名有5种共16列,每一种的个数平方再加上不重复的数量刚好就是62!这就说明,凡是重复的列都进行了重复的转换,也就是平方。(重复的问题真的太麻烦了)所以我把那个label列表用unique()函数筛选了一下,将重复的标签都删除了。 ```python unique_label = np.unique(label) a = data[unique_label].astype('float') ``` 最后再尝试一下mean()函数求平均
aver = data.groupby(['Year', 'Month']).mean()

终于没有问题了

最终的代码

import pandas as pd
import numpy as np
read_num = []
for i in range(41):
    read_num.append(i)
drop_list = [2, 7, 8, 9, 10, 16, 17, 18, 19, 25, 26, 27, 28, 33, 34, 35, 36]  # 不需要读取的excel列号
read_num = np.delete(read_num, drop_list)
df = pd.read_excel(io='use_nofillvalue(1).xlsx', usecols=read_num)
label = list(df.iloc[0])
data = df.drop([0])
data.columns = label
unique_label = np.unique(label)
a = data[unique_label].astype('float')
aver = a.groupby(['Year', 'Month']).mean()
  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
excel常用函数公式及技巧搜集 从身份证号码中提取出生年月日 从身份证号码中提取出性别 从身份证号码中进行年龄判断 按身份证号号码计算至今天年龄 以2006年10月31日为基准日,按按身份证计算年龄(周岁)的公式 按身份证号分男女年龄段 【年龄和工龄计算】 根据出生年月计算年龄 根据出生年月推算生肖 如何出一个人到某指定日期的周岁? 计算距离退休年龄的公式 工齡 计算工龄 年龄及工龄计算自动算出工龄日期格式为(yyyy.mm.dd) 【时间和日期应用】 自动显示当前日期公式 如何在单元格中自动填入当前日期 如何判断某日是否星期天 某个日期是星期几 什么函数可以显示当前星期 本月天数 显示昨天的日期 关于取日期 如何对日期进行上、中、下旬区分 如何获取一个月的最大天数 日期格式转换公式 【排名及排序筛选】 一个具有11项汇总方式的函数SUBTOTAL 自动排序 按奇偶数排序 自动生成序号 如何自动标示A栏中的数字大小排序? 如何设置自动排序 重复数据得到唯一的排位序列 按字符数量排序 排序字母与数字的混合内容 随机排序 排序的问题 怎样才能让数列自动加数 一个排序问题 数字的自动排序,插入后不变? 根据规律的重复的姓名列产生自动序号 排名的函数 自动排名公式 百分比排名的公式写法为: 平均分及总分排名 名次排名 排名次根据分数进行普通排名 对于普通排名分数相同时,按顺序进行不重复排名 依分数比高低名次成绩排名 美国式排名 中国式排名 最精简的自动排名公式 排序后排名 位次排名 根据双列成绩进行共同排名 在双列间排名 等次排名 不等次排名(行小排先) 不等次排名(行大排先) 顺次排名 有并列排名 无并列排名 有并列分段排名 无并列分段排名 成绩排名 如何排名 数据排名(隔几行排名) 根据分数进行倒排名 倒数排名函数是什么 如何实现每日各车间产量的排名 分数相同时按照一科的分数进行排名 筛选后自动产生序列号并汇总 如何筛选奇数行 函数筛选姓名 名次筛选 如何实现快速定位(筛选出不重复值) 如何请在N列中列出A1:L9中每列都存在的数值 自动为性别编号的问题 【文本与页面设置】 EXCEL中如何删除*号 将字符串中的星号“*”替换为其它字符 去空格函数如何去掉字符和单元格里的空格 怎样快速去除表中不同行和列的空格 如何禁止输入空格 代替单元格中字符串 把单元格中的数字转变成为特定的字符格式 把有六百多个单元格的一列,变成一页的多列 将N列变M列公式归纳为 一列变四列 四列变一列 重复四次填充 多行数据排成一列 将单元格一列分为多列 首写字母大写 把单元格编号中的小写字母变成大写字母 让姓名左右对齐 数字居中而小数点又对齐 计算指定单元格编号组中非空单元格的数量 比较两个单元格内容是否一致 怎么样设置才能让这一列的每个单元格只能输入12位 如何让工作表奇数行背景是红色偶数行背景是蓝色 计算特定的一组单元格中,满足条件的单元格的个数 把文本格式的数字转换成真正的数字 设置页码 Excel表格里如何插入页码的? 如何设置页脚首页为第5页 表格的页脚问题 无拘无束的页眉 打印表头 Excel打印中如何不显示错误值符号 对于一些不可打印的字符的处理 用那个函数可将个位数前面的零值显示出来? 如果你要在A3的前面插入100行 请问如何每隔30行粘贴一新行 在工作表里有连续10行数据, 现在要每行间格2行 一个大表每一行下面需要加一行空行,怎么加最方便 Excel中插入空白行 快速删除工作表中的空行快速删除空行一次删完Excel里面多出很多的空白行 每30行为一页并加上一个标题如何实现如何实现隔行都加上标题项 如何把标签页去掉的? 去掉默认的表格线(网线)表格的框线 列标的标识变了 符号的意义 双击格式刷竟也能COPY文本(不是文本格式) 查找+格式刷的妙用 光标移动 最后一行为文本最后一行为数字 如何在EXCEL中快速定位最后一行数据 用SUN函数快速和 在Excel中快速查看所有工作表公式 在Excel中设置行间距 怎样同时改变多行行高 快速换行 让文本换行 在Excel中行列快速转换 将原有列中的内容倒置过来 快速回到A1单元格 复制粘贴中回车键的妙用 一次选中批注单元格 一次在所有单位格中插入批注 在公式中插入批注 不连续单元格填充同一数据 空白行的填充 怎样用函数向下实现自动填充 怎么设置自动保存 避免输入网址和电子邮件地址时的超链接 单元格前面自动加了等号 加盖公章 查找+格式刷的妙用 Excel中鼠标双击妙用 Excel中快速定位的技巧实例 在Excel中插入Flash时钟的步骤 小写数字转换成人民币大写 轻轻松松制作超复杂Excel表头 【字符截取与增减】 截取单元格里某个字符后的字符 截取字符的公式 如何确定*号后的数字 如何提取数字中间的数 三个数中,如何取出中间那个 取数值后三位公式 取数函数 如何把单元格中的数字提取出来(字符串中不连续) 数字在字符串中不连续如何提取数字 用如何提取“-”前后的字符 怎样删去﹕后的文字 怎样只取“.”之后的文字﹖ 获取单元格内容中字符串 如何提取一串数字中的几位数字(字符) 如何把一个单元格中的数字挑出来 分割文本 按照给定的位数,截断小数点后的数字 单元格数字提取问题 以关键字提取名称 如何把文本中的前几个字符去除 对一列中的文字统一去掉最后一个字 讨如何去掉单元格中的第一个数字? 论一下取最后一个单词的方法 如何去掉单元格最后一位数字 如何在一列已经输入的数据前添加“p” 什么函数可以插入字符 如何在数据前添加“*”号 数字前面加上数字 【数据拆分与合并】 数字如何拆分 单元格中的数据拆分 单元格的拆分 如何拆分字组 用连字符“&”来合并文本怎样把不同格式不同位置的内容合并到一个单元格内 把不同单元格的内容合到一个单元格里 合并与拆分 合并不同单元格的内容 关于文字在表格中的组合 拆解合并公式 如何把字母和数字分开? 把分散在各单元格的内容合在一个单元格中 多个工作表的单元格合并计算 【条件自定义格式】 通过条件格式将小计和总计的行设为不同的颜色 如何实现这样的条件格式 隔行不同字体颜色怎么设置 让不同类型数据用不同颜色显示 如何做这样的EXCEL表(颜色交叉) 条件格式 使用条件格式设置颜色条纹 相同数据的提示? 如何做到小于10显示二位小数,大于10显示一位小数 如何根据数值的正负加上“+”“-”符号 120,000显示为12.0 121,999显示为12.2 自定义单元格格式将单元格中的数全部变成万元表示 有何办法实现将一张表中的数据由元的单位转换为万元 常用的自定义格式 自定义格式 怎样定义格式 在工具按钮之间设置分隔线 自定义区域为每一页的标题 一个单元格内格式问题 定制单元格数字显示格式 巧用定位选条件单元格 工作表的标签的字体和大小可以更改吗 隔行用不同颜色显示,请问如何做 将单元格设置为有“凸出”的效果或“凹进去”的效果 在Excel中设计彩色数字 定义名称的妙处 零值问题 【汇总计算与统计】 个调税公式 算物价的函数 自动计算应收款滞纳金 淘汰率 应用公积金的一个函数 如何利用公式将数值转为百分比格式 比高得分公式 自动评定奖级 对带有单位的数据如何进行和 对a列动态和 动态和公式 列的跳跃和 有规律的隔行和 如何实现奇数行或偶数行和 单数行和统计偶数单元格合计数值 隔行和公式设置 隔列将相同项目进行和 隔行或隔列加总 请问如何在一百行内做隔行相加 如何将间隔一定的列的数据相加呢 隔列和(A、B列) 隔列和的公式 隔列和 关于隔行、隔列和的问题 EXCEL两列的对应元素乘积之和 计算900~1000之间的数值之和 双条件和 如何实现这样的条件和 A1:A10数字显为文本格式时,如何和 如何分班统计男女人数 统计数值大于等于80的单元格数目 计算出A1里有几个abc 有条件统计 如何统计各年龄段的数量 如何计算20-50岁的人数? 如何统计40-50岁的人的个数 要统计出7岁的女生人数 统计人数 如何统计A1:A10,D1:D10中的人数? 如何让EXCEL自动从头统计到当前单元格 统计人数 统计人数 各分数段人数 有什么方法统计偶数 如何显示 工资统计中的问题 统计数据问题一例 根据给定的条件,对数据进行合计 十列数据合计成一列 统计汉字字符个数 关于取数 统计单元格内不为空的格数 自动将销量前十名的产品代号及销量填入表中 统计最大的连续次数3个“不重复”个数统计在一列有重复的姓名中,如何统计出具体有几人 计数的问题 不相同 如何分班统计男女人数 在几百几千个数据中发现重复项 统计互不相同的数据个数 多个工作表的单元格合并计算 单个单元格中字符统计 数据区包含某一字符的项的总和,该用什么公式 函数如何实现分组编码 【数值取整及进位】 取整数函数 数值取整 余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 根据给定的位数,四舍五入指定的数值 四舍六入 如何实现2舍3入 怎么设置单元格以千元四舍五入 ROUND函数的四舍五入不进位的解决方法? 保留一位小数 如何三舍四入 另类四舍五入 想把小数点和后面的数字都去掉,不要四舍五入 真正的四舍五入后的数 小数点进位 个位数归0或者归5 【大小值或中间值】 平均值 如何实现平均值时只对不等于零的数均值? 平均分的问题 怎样最大值(最小值或中间值)平均数怎么弄 去掉其中两个最大值和两个最小值的公式 去一行最高分最低分平均值 在9个数值中去掉最高与最低然后平均最大值(n列) 如何实现平均值时只对不等于零的数均值? 得到单元格编号组中最大的数或最小的数 标记出3个最大最小值 取前五名,后五名的方法 如何用公式出最大值所在的行? 多个最高分 如何多条件的平均值 想出第三大之数值 【查询和查找引用】 查找顺序公式 怎样实现精确查询 查找及引用 查找函数的应用 怎么能方便的判断某个单元格中包含多少个指定的字符?如何用查找函数 日期查找的问题 如何自动查找相同单元格内容 查找函数怎样对号入座(查找) 一个文本查找的问题 查找一列中最后一个数值 查找重复字符 请教查找替换问题 IF函数替换法总结 查找的函数(查找末位词组) 怎样从原始数据中自动获取最后一个数据 两列数据查找相同值对应的位置 查找数据公式两个(基本查找函数为VLOOKUP,MATCH) 【输入数据的技巧】 谈谈Excel输入的技巧 一列中不输入重复数字 如果要查找重复输入的数字 单元格输入 大量0值输入超级技巧 如何在C列中输入工号在D列显示姓名 输入提示如何做 在信息输入前就给予提示 数据有效性
### 回答1: Python pandas可以通过以下步骤筛选Excel数据: 1. 使用pandas库中的read_excel()函数读取Excel文件,将数据读入到DataFrame中。 2. 使用DataFrame中的loc[]函数或者iloc[]函数,根据条件筛选需要的数据。 3. 将筛选后的数据保存到Excel文件中,可以使用to_excel()函数。 例如,以下代码可以读取Excel文件中的数据,并筛选出“销售额”大于100的数据: ``` import pandas as pd # 读取Excel文件 df = pd.read_excel('data.xlsx') # 筛选销售额大于100的数据 df_filtered = df.loc[df['销售额'] > 100] # 将筛选后的数据保存到Excel文件中 df_filtered.to_excel('filtered_data.xlsx', index=False) ``` 以上代码中,'data.xlsx'是要读取的Excel文件名,'销售额'是Excel文件中的列名,'filtered_data.xlsx'是保存筛选后数据Excel文件名。 ### 回答2: Python是一种面向对象的动态编程语言,很适合数据分析、数据挖掘和数据科学等领域的应用。PandasPython的一个数据分析库,它提供了很多有用的数据结构和函数,使得Python更具备分析和处理数据的能力。 Pandas可以轻松地读取、处理和操作Excel文件,提供各种方法和工具来筛选数据。以下是在Python Pandas中筛选Excel数据的基本步骤: 1. 导入Pandas库,可以使用以下代码: ``` import pandas as pd ``` 2. 读取Excel文件,常用的方法是使用read_excel()函数,如下所示: ``` df = pd.read_excel('filename.xlsx') ``` 3. 查看数据,可以使用head()函数查看前几行数据,如下所示: ``` print(df.head()) ``` 4. 根据条件筛选数据,如下面的例子中,我们将从df中筛选出所有'Male'性别的数据: ``` male = df[(df['Gender'] == 'Male')] ``` 5. 可以使用多个条件来筛选数据,如下例子所示,我们将从df中筛选出'Male'性别中'Software Engineer'职位的数据: ``` male_software = df[(df['Gender'] == 'Male') & (df['Job Title'] == 'Software Engineer')] ``` 6. 可以使用类似于SQL的关键字来进行筛选,如下所示: ``` df.query("Gender == 'Male' and `Job Title` == 'Software Engineer'") ``` 7. 根据列的值排序数据,可以使用sort_values()函数,如下所示: ``` df.sort_values('Salary', inplace=True) ``` 8. 保存结果,可以使用to_excel()函数保存结果到Excel文件,如下所示: ``` male_software.to_excel('result.xlsx', index=False) ``` 以上就是在Python Pandas中筛选Excel数据的基本步骤。筛选Excel数据数据分析和科学的重要环节,Pandas使得这个过程更加简单和自动化。 ### 回答3: PandasPython编程语言中的数据处理包,它能够很方便地对数据进行筛选和分析。Pandas主要使用的是DataFrame对象完成数据处理,其具有类似于Excel电子表格的形式,数据以行和列的形式组织。DataFrame是Pandas中最重要的数据结构,通常它会使用read_excel()函数将Excel文件转换为DataFrame格式,实现数据的筛选和分析。 通常使用Pandas筛选Excel数据可以分为以下步骤: 1. 导入必要的模块和Excel数据 要使用Pandas进行数据处理,我们需要首先导入Python中相应的模块包,如pandas和numpy等。同时,我们需要将需要筛选的Excel数据导入到Python中,并将其转化为DataFrame数据结构,此时使用read_excel()函数是比较方便的。 2. 数据清洗 在导入Excel数据后,我们需要对数据进行整理和清洗,删除缺失值和重复值以保证数据的完整性。 3. 数据筛选 将数据整理好后,可以对DataFrame数据表进行筛选。通常情况下,我们可以使用Pandas的布尔索引功能对数据进行筛选。布尔索引是以布尔运算为条件的索引方式,以创建一个筛选器数组来选择DataFrame对象中的特定行、列等。 4. 数据可视化 最后一个步骤是将筛选出来的数据进行可视化展示,可以使用Python中的matplotlib或seaborn等库进行数据可视化。 总之,PythonPandasExcel数据处理方面具有很大的优势和便利,可以快速地对数据进行筛选、分析和可视化等操作。以上是Pandas筛选Excel数据的一般步骤,具体还需根据实际场景来设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值