鱼C论坛

 找回密码
 立即注册
查看: 2600|回复: 7

[已解决]openpyxl之提取列并做预处理

[复制链接]
发表于 2023-4-25 08:28:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
要求:提取Excel文件 一,二,三中的A列与C列,遍历两列的值如有负值处理为正值,并计算处理后的两列值的平均值,作为第三列.(列名为 mean),最后保存为新的excel
最佳答案
2023-4-25 09:41:39
为了完成此任务,您需要先安装`openpyxl`模块,如果尚未安装,请使用以下命令安装:

  1. pip install openpyxl
复制代码


然后,您可以使用以下代码来完成任务:

  1. import openpyxl
  2. from openpyxl import Workbook

  3. # 加载工作簿
  4. workbook1 = openpyxl.load_workbook("一.xlsx")
  5. workbook2 = openpyxl.load_workbook("二.xlsx")
  6. workbook3 = openpyxl.load_workbook("三.xlsx")

  7. workbooks = [workbook1, workbook2, workbook3]

  8. # 创建一个新的Excel文件来存储结果
  9. result_workbook = Workbook()
  10. result_sheet = result_workbook.active
  11. result_sheet.title = "处理结果"

  12. # 写入列名
  13. result_sheet.cell(row=1, column=1, value="A")
  14. result_sheet.cell(row=1, column=2, value="C")
  15. result_sheet.cell(row=1, column=3, value="mean")

  16. row_counter = 2

  17. for wb in workbooks:
  18.     sheet = wb.active
  19.     max_row = sheet.max_row

  20.     for row in range(2, max_row + 1):
  21.         # 提取A列与C列的值
  22.         a_value = sheet.cell(row=row, column=1).value
  23.         c_value = sheet.cell(row=row, column=3).value

  24.         # 处理负值
  25.         if a_value < 0:
  26.             a_value = abs(a_value)
  27.         if c_value < 0:
  28.             c_value = abs(c_value)

  29.         # 计算平均值
  30.         mean_value = (a_value + c_value) / 2

  31.         # 将结果写入新的Excel文件
  32.         result_sheet.cell(row=row_counter, column=1, value=a_value)
  33.         result_sheet.cell(row=row_counter, column=2, value=c_value)
  34.         result_sheet.cell(row=row_counter, column=3, value=mean_value)

  35.         row_counter += 1

  36. # 保存结果为新的Excel文件
  37. result_workbook.save("结果.xlsx")
复制代码


这段代码会读取文件一,二,三的A列与C列,处理负值并计算平均值,然后将结果写入一个名为“结果.xlsx”的新Excel文件。您需要将文件名替换为实际的文件名。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-25 09:41:39 | 显示全部楼层    本楼为最佳答案   
为了完成此任务,您需要先安装`openpyxl`模块,如果尚未安装,请使用以下命令安装:

  1. pip install openpyxl
复制代码


然后,您可以使用以下代码来完成任务:

  1. import openpyxl
  2. from openpyxl import Workbook

  3. # 加载工作簿
  4. workbook1 = openpyxl.load_workbook("一.xlsx")
  5. workbook2 = openpyxl.load_workbook("二.xlsx")
  6. workbook3 = openpyxl.load_workbook("三.xlsx")

  7. workbooks = [workbook1, workbook2, workbook3]

  8. # 创建一个新的Excel文件来存储结果
  9. result_workbook = Workbook()
  10. result_sheet = result_workbook.active
  11. result_sheet.title = "处理结果"

  12. # 写入列名
  13. result_sheet.cell(row=1, column=1, value="A")
  14. result_sheet.cell(row=1, column=2, value="C")
  15. result_sheet.cell(row=1, column=3, value="mean")

  16. row_counter = 2

  17. for wb in workbooks:
  18.     sheet = wb.active
  19.     max_row = sheet.max_row

  20.     for row in range(2, max_row + 1):
  21.         # 提取A列与C列的值
  22.         a_value = sheet.cell(row=row, column=1).value
  23.         c_value = sheet.cell(row=row, column=3).value

  24.         # 处理负值
  25.         if a_value < 0:
  26.             a_value = abs(a_value)
  27.         if c_value < 0:
  28.             c_value = abs(c_value)

  29.         # 计算平均值
  30.         mean_value = (a_value + c_value) / 2

  31.         # 将结果写入新的Excel文件
  32.         result_sheet.cell(row=row_counter, column=1, value=a_value)
  33.         result_sheet.cell(row=row_counter, column=2, value=c_value)
  34.         result_sheet.cell(row=row_counter, column=3, value=mean_value)

  35.         row_counter += 1

  36. # 保存结果为新的Excel文件
  37. result_workbook.save("结果.xlsx")
复制代码


这段代码会读取文件一,二,三的A列与C列,处理负值并计算平均值,然后将结果写入一个名为“结果.xlsx”的新Excel文件。您需要将文件名替换为实际的文件名。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-25 10:02:33 | 显示全部楼层
isdkz 发表于 2023-4-25 09:41
为了完成此任务,您需要先安装`openpyxl`模块,如果尚未安装,请使用以下命令安装:

各自处理一,二,三文件数据,出现
File "C:\code\结果.py", line 21, in <module>
    sheet = wb.active
AttributeError: 'Worksheet' object has no attribute 'active'
是为什么,应如何解决呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-25 10:49:46 | 显示全部楼层
王大可2000 发表于 2023-4-25 10:02
各自处理一,二,三文件数据,出现
File "C:\code\结果.py", line 21, in
    sheet = wb.active

你的表格文件是什么格式的?你的完整代码又是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-25 10:52:54 | 显示全部楼层
isdkz 发表于 2023-4-25 10:49
你的表格文件是什么格式的?你的完整代码又是什么?

import openpyxl
from openpyxl import Workbook

# 加载工作簿
workbook = openpyxl.load_workbook("安溪.xlsx")


# 创建一个新的Excel文件来存储结果
result_workbook = Workbook()
result_sheet = result_workbook.active
result_sheet.title = "处理结果"

# 写入列名
result_sheet.cell(row=1, column=1, value="PRE")
result_sheet.cell(row=1, column=2, value="SSH")
result_sheet.cell(row=1, column=3, value="mean")

row_counter = 2

for wb in workbook:
    sheet = wb.active
    max_row = sheet.max_row

    for row in range(2, max_row + 1):
        # 提取S列与T列的值
        a_value = sheet.cell(row=row, column=19).value
        c_value = sheet.cell(row=row, column=20).value

        # 处理负值
        if a_value < 0:
            a_value = abs(a_value)
        if c_value < 0:
            c_value = abs(c_value)

        # 计算平均值
        mean_value = (a_value + c_value) / 2

        # 将结果写入新的Excel文件
        result_sheet.cell(row=row_counter, column=1, value=a_value)
        result_sheet.cell(row=row_counter, column=2, value=c_value)
        result_sheet.cell(row=row_counter, column=3, value=mean_value)

        row_counter += 1

# 保存结果为新的Excel文件
result_workbook.save("安溪结果.xlsx")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-25 10:54:04 | 显示全部楼层
王大可2000 发表于 2023-4-25 10:52
import openpyxl
from openpyxl import Workbook

你不是说有三个excel文件吗?你的代码就只有一个?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-25 10:59:24 | 显示全部楼层
isdkz 发表于 2023-4-25 10:54
你不是说有三个excel文件吗?你的代码就只有一个?

三个文件分开处理,要求一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-25 11:03:04 | 显示全部楼层
王大可2000 发表于 2023-4-25 10:59
三个文件分开处理,要求一样

了解,这是处理单个Excel文件的代码。您可以根据需要修改文件名和输出文件名。

  1. import openpyxl
  2. from openpyxl import Workbook

  3. # 加载工作簿
  4. workbook = openpyxl.load_workbook("文件名.xlsx")

  5. # 获取活动工作表
  6. sheet = workbook.active

  7. # 创建一个新的Excel文件来存储结果
  8. result_workbook = Workbook()
  9. result_sheet = result_workbook.active
  10. result_sheet.title = "处理结果"

  11. # 写入列名
  12. result_sheet.cell(row=1, column=1, value="A")
  13. result_sheet.cell(row=1, column=2, value="C")
  14. result_sheet.cell(row=1, column=3, value="mean")

  15. max_row = sheet.max_row

  16. for row in range(2, max_row + 1):
  17.     # 提取A列与C列的值
  18.     a_value = sheet.cell(row=row, column=1).value
  19.     c_value = sheet.cell(row=row, column=3).value

  20.     # 处理负值
  21.     if a_value < 0:
  22.         a_value = abs(a_value)
  23.     if c_value < 0:
  24.         c_value = abs(c_value)

  25.     # 计算平均值
  26.     mean_value = (a_value + c_value) / 2

  27.     # 将结果写入新的Excel文件
  28.     result_sheet.cell(row=row, column=1, value=a_value)
  29.     result_sheet.cell(row=row, column=2, value=c_value)
  30.     result_sheet.cell(row=row, column=3, value=mean_value)

  31. # 保存结果为新的Excel文件
  32. result_workbook.save("处理结果.xlsx")
复制代码


这段代码会读取一个Excel文件的A列与C列,处理负值并计算平均值,然后将结果写入一个名为“处理结果.xlsx”的新Excel文件。您需要将“文件名.xlsx”替换为实际的文件名,以及将“处理结果.xlsx”替换为您想要的输出文件名。如果您需要处理其他两个文件,只需将此代码复制并修改输入和输出文件名即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表