python 在Excel中,如何按行求平均值

python 在Excel中,如何按行求平均值

这是我的数据

img

我需要按颜色相同的行求他的平均值

img

并且再添加一行

img

如何编写代码呀,我是个正在学习python的学生,现在学的迷茫了

你可以使用pandas库在Python中处理Excel数据。以下是一个简单的示例,说明如何计算每行的平均值:

import pandas as pd

# 读取excel文件
df = pd.read_excel('your_file.xlsx')

# 按行求平均值
df['row_mean'] = df.mean(axis=1)

# 保存结果到新的excel文件
df.to_excel('output_file.xlsx')

在这段代码中,pd.read_excel('your_file.xlsx')用于读取你的Excel文件;df.mean(axis=1)用于按行计算平均值(如果你想按列计算,就将1改为0);最后一行将结果保存到新的Excel文件中。

首先,我们需要使用Python中的第三方库openpyxl来读取和写入Excel文件。如果您还没有安装该库,可以通过运行命令pip install openpyxl来进行安装。

接下来,我们需要打开Excel文件,并选择要进行操作的工作表。请确保您已将Excel文件放在正确的路径下,并且知道要操作的工作表的名称。

import openpyxl

# 打开Excel文件
workbook = openpyxl.load_workbook('your_file.xlsx')

# 选择要操作的工作表
sheet = workbook['Sheet1']


然后,我们可以使用iter_rows()方法迭代每一行,并计算平均值。在计算平均值之前,我们需要确定每行的起始列和结束列。

# 按行求平均值
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=2, max_col=sheet.max_column):
    row_values = [cell.value for cell in row]
    average = sum(row_values) / len(row_values)
    # 将平均值写入新的列
    sheet.cell(row=row[0].row, column=sheet.max_column + 1, value=average)


在上述代码中,我们使用了iter_rows()方法来迭代每一行。min_row和max_row参数用于指定要迭代的行范围,min_col和max_col参数用于指定要迭代的列范围。

对于每一行,我们通过列表推导式将每个单元格的值提取到row_values列表中。然后,我们可以使用sum()函数计算列表中所有值的总和,并除以列表的长度来求得平均值。

最后,我们使用cell()方法将计算得到的平均值写入到新的列中。row[0].row表示当前行的行号,sheet.max_column + 1表示新列的列号。

最后,我们需要保存对Excel文件的更改,并关闭文件。

# 保存更改
workbook.save('your_file.xlsx')

# 关闭文件
workbook.close()


示例代码整合如下:

import openpyxl

# 打开Excel文件
workbook = openpyxl.load_workbook('your_file.xlsx')

# 选择要操作的工作表
sheet = workbook['Sheet1']

# 按行求平均值
for row in sheet.iter_rows(min_row=2, max_row=sheet.max_row, min_col=2, max_col=sheet.max_column):
    row_values = [cell.value for cell in row]
    average = sum(row_values) / len(row_values)
    # 将平均值写入新的列
    sheet.cell(row=row[0].row, column=sheet.max_column + 1, value=average)

# 保存更改
workbook.save('your_file.xlsx')

# 关闭文件
workbook.close()


结论:
使用Python的openpyxl库,我们可以方便地对Excel文件进行操作,并实现按行求平均值的功能。通过上述示例代码,我们可以读取Excel文件中的数据,计算每一行的平均值,并将结果写入到新的列中。这为我们在Excel中进行数据统计和分析提供了一种快捷方便的方式。

excel就可以实现的,如果用程序实现也不难,读取每一行该列的数值,最后用公式计算即可

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7735132
  • 你也可以参考下这篇文章:使用python对两个Excel表进行数据比较,得到差异和相同的数据行。
  • 除此之外, 这篇博客: python自动化办公(第9课)批量调整Excel中字体、样式中的 作业:编写python程序,要求如下: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 打开阿里云天池电商婴儿用户数证.xlsx
    • 找到day在2014年以后,buy_mount中大于5的数据
    • 将其他数据行删除掉,最后不要在中间留空行
    • 将buy_mount中大于等于10的数据行背景颜色标为红色,字体标为白色
    • 保存该Excel文件
    from openpyxl import load_workbook
    from openpyxl.styles import PatternFill
    from openpyxl.styles import Font
    
    # 设置查找表头所在列号函数
    def search_col(col_name):
        workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")
        sheet = workbook.active
        for cell in sheet[1]:
            if cell.value == col_name:
                return(cell.column)
        # 没有对表进行修改,不需要workbook.save
    
    # 设置删除行函数
    def delete_row():
        workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")
        sheet = workbook.active
        for cell in sheet["A"]:
            if cell.value == "待删除":
                sheet.delete_rows(idx=cell.row)
        workbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")
        # 对表进行了修改,需要workbook.save
    
    # 设置筛选出2014年之后的数据行,其余待删除
    def search_col_value(num):
        workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")
        sheet = workbook.active
        # range为左闭右开区间,从第2行一直遍历到1001行
        for r in range(2,1002):
            cell = sheet.cell(row=r, column=num)
            # cell.value是int型,转为str型用字符串切片的方法把value中年份取出来,再转为整形和2014比较大小
            if cell.value !=None:
                if int(str(cell.value)[0:4]) > 2014:
                    continue
                else:
                    # 2014年以前的行删掉
                    re_cell = sheet.cell(row=r, column=1)
                    re_cell.value = "待删除"
            else:
                # value为空时默认在2014年之前,删掉该行
                re_cell = sheet.cell(row=r, column=1)
                re_cell.value = "待删除"
        workbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")
    
    # 设置返回剩余行数函数
    def remain_row():
        from openpyxl import load_workbook
        workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")
        sheet = workbook.active
        sheet_size = sheet.dimensions     # 返回的是一个字符串如A1:G1001
        # 字符串切片取出行数,因为A1固定输出,所以行数为编号4以后(去掉“A1:G”即为行数)
        sheet_rows = sheet_size[4:]
        return(sheet_rows)
    
    def main():
        col_num = search_col("day")     # 接收待遍历的列号
        search_col_value(col_num)     # 筛选2014年之后的数据行
        # 调用删除数据行函数,将待删除的数据行删除
        delete_row()
    
        workbook = load_workbook(filename="阿里云天池电商婴儿用户数据.xlsx")
        sheet = workbook.active
        # 获取buy_mount列号
        buy_col_num = search_col("buy_mount")
        sheet_rows = int(remain_row()) + 1     # 获取剩余行数,并str转int。range左闭右开所以要+1
        for r in range(2,sheet_rows):
            cell = sheet.cell(row=r, column=buy_col_num)
            if cell.value == None:
                # 默认待删除
                re_cell = sheet.cell(row=r, column=1)
                re_cell.value = "待删除"
            else:
                if int(cell.value) < 5:
                    # 待删除
                    re_cell = sheet.cell(row=r, column=1)
                    re_cell.value = "待删除"
                else:
                    if int(cell.value) >= 10:
                        pattern_fill = PatternFill(fill_type="solid", fgColor="DD001B")
                        for need_pattern_cell in sheet[r]:
                            need_pattern_cell.fill = pattern_fill
    
                        # 字体颜色白
                        font = Font(color="FFFFFF")
                        for change_fontColor_cell in sheet[r]:
                            change_fontColor_cell.font = font
        workbook.save(filename="阿里云天池电商婴儿用户数据.xlsx")
        # 再调用一次删除行数据函数,buy_mount小于10的待删除数据行删除
        delete_row()
    
    main()
    
  • 您还可以看一下 小明老师的python开发实战-案例讲解课程中的 使用python写数据到excel中小节, 巩固相关知识点

可以用Spire.XLS for Python
推荐使用pip命令安装:

pip install Spire.XLS-for-Python
pip install plum-dispatch==1.7.4

要获取指定颜色的卖价平均值,思路很简单,首先查找对应颜色所在的单元格,获取每个找到的单元格左边单元格的值(即卖价),然后将它们加起来再除以这些单元格出现的总行数/次数,就是平均值。下面是一个简单的例子,我已经运行过没发现问题

from spire.common import *
from spire.xls import *

#创建Workbook对象
workbook = Workbook()
#加载Excel文档
workbook.LoadFromFile("FindDataAndGetAverageTemplate.xlsx")

#获取指定工作表 (索引从0开始)
worksheet = workbook.Worksheets[0]

#查找指定颜色所在单元格
ranges = worksheet.FindAllString("绿|黑", False, False)

i = 0
sum = 0

#遍历找到的单元格
for range in ranges:
    #获取单元格所在的行索引
    row = range.Row
    #获取单元格所在的列索引
    column = range.Column
    #获取该单元格前一个单元格的数据值即卖价
    value = worksheet.Range[row, column -1].NumberValue
    #将所有卖价求和
    sum += value
    
    i += 1

#获取卖价的平均值并打印
average = sum/i    
print(average)

看你的问题好像其实是要分组求均值?前面的都是都是直接不看问题直接gpt跑的吧。
用groupby就行