【问题标题】:Taking difference between two cells in python for loop在python for循环中取两个单元格之间的差异
【发布时间】:2020-12-27 07:49:23
【问题描述】:

我要做的是找出 B201 和 B52 单元格之间的区别,并将答案放入 D52 单元格 excel 中。然后,我想重复减法公式直到 value1 单元格,它可以是任何行。我在 b 列中的值是时间戳。这就是我使用日期时间的原因。

filename1 ="C:\\Users\\hhh.xlsx"
wb2 = xl.load_workbook(filename1)
ws2 = wb2.active
for i in range(52,value1) and j in range (201, int(value2)):
    ws2.cell(row=i, column=4).value = datetime.datetime(float(ws2.cell(row=j, column=2).value)) -  datetime.datetime(float(ws2.cell(row=i, column=2).value))

有人可以纠正我吗?提前致谢

【问题讨论】:

  • 什么是value2
  • 这被标记为 pandas,但在此示例中您没有使用 pandas。如果您要使用 pandas,那么我会考虑使用 .shift() 而不是循环。例如:df['Col D'] = df['Col B'] - df.shift(149)['Col B']

标签: python python-3.x pandas openpyxl


【解决方案1】:

只需使用一个从0value1 的循环,然后将其添加到52201 以获取应减去的相应行。

for n in range(value1):
    i = 52 + n
    j = 201 + n
    cell1 = ws2.cell(row=j, column=2).value
    cell2 = ws2.cell(row=i, column=2).value
    if cell1 and cell2: # Make sure both cells are filled in
        ws2.cell(row=i, column=4).value = float(cell1) -  float(cell2)

【讨论】:

  • 非常感谢您的帮助。如果我运行上面的代码,我会得到“TypeError: integer argument expected, got float”。如果我删除 datetime.datetime 并仅使用浮点数,我会得到“TypeError:float() 参数必须是字符串或数字,而不是 'NoneType'”。请帮助我
  • 这是一个完全不相关的问题,与循环无关。
  • 你确定所有的单元格都填写了吗?如果没有,您需要在尝试使用它们之前进行检查。
  • 我已更新答案以添加检查并删除不适当的datetime 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2021-11-19
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多