【问题标题】:Replace missing values in excel worksheet using openpyxl module使用openpyxl模块替换excel工作表中的缺失值
【发布时间】:2016-11-01 23:17:10
【问题描述】:

我正在尝试将 Excel 工作表中包含连字符“-”的单元格替换为上方单元格和下方单元格之间的平均值。我将尝试通过循环遍历第 3 列中的每一行来做到这一点

 import math
 from openpyxl import load_workbook
 import openpyxl

 d_filename="Snow.xlsx"
 wb = load_workbook(d_filename)

 sheet_ranges=wb["PIT 1"]'


def interpolatrion_of_empty_cell():

for i in range(7,31):
    if i =="-":
        sheet_ranges.cell(row = i, column = 3).value = mean(i-1,i+1)
    else:
        sheet_ranges.cell(row = i, column = 3).value

wb.save(filename = d_filename)

这只是容易做到还是用openpyxl不可能?

干杯// 斯米夫

【问题讨论】:

  • 那么你的问题是什么?你有什么错误?
  • 哦抱歉....忘记了最重要的部分。我不会收到任何错误消息,但包含连字符的单元格不会被平均值替换。保存文件后,它们仍保留为连字符。如果这有任何意义。

标签: python python-3.x openpyxl


【解决方案1】:

未替换值的原因是您使用i 来检查它是否等于-。 i 是一个索引,而不是一个单元格的值。同样要计算平均值,您使用的是索引,而不是顶部和下方单元格的值。

所以你可以通过以下方式解决这个问题:

def interpolatrion_of_empty_cell():
     for i in range(7,31):
          cell_value = sheet_ranges.cell(row=i, column=3).value
          if cell_value == "-":
               top_value = sheet_ranges.cell(row=i+1, column=3).value
               bottom_value = sheet_ranges.cell(row=i - 1, column=3).value
               sheet_ranges.cell(row=i, column=3).value = (float(top_value) + float(bottom_value))/2

这并不是说这可能需要调整,因为它不适用于 tob 和底行是-、不是数字或只是空单元格的情况。

【讨论】:

  • 这通常可以解决问题,但如果上部和/或下部单元格还包含'-',该怎么办?
  • @MosesKoledoye 这就是我写的调整。如果它们是数字,则需要检查这些值,如果不是,则设置一些默认值,例如 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多