【问题标题】:OpenPyXL - How to skip row if cell.value is NoneOpenPyXL - 如果 cell.value 为 None 如何跳过行
【发布时间】:2017-09-25 20:59:12
【问题描述】:

我在这里阅读了很多关于空行的答案,但不知何故,我尝试将这些解决方案适应我的脚本失败了。

我正在使用 OpenPyXL 读取 excel 文件中的表格并将其加载到要处理到 DataFrame 的部分(首先将每一行读取到列表列表,然后将其转换为 DataFrame)。问题是,如果第一个单元格的 cell.value 为 None,我正在寻找跳过行的优雅解决方案

我使用以下代码遍历行:

for row in ws.iter_rows(min_col=adres[0], min_row=adres[1], max_col=adres[2], max_row=adres[3]):
    data_rows.append([cell.value for cell in row]) 

【问题讨论】:

  • 代码不完整。
  • 其余代码无关紧要,因为这部分负责逐个单元格读取每一行单元格并将其放入列表data_rows。它工作得很好,除了我希望它跳过我猜第一个单元格行 [0] 位置为空的行。
  • 您不一定处于决定什么相关或不相关的最佳位置。传入的所有参数都应始终在某处定义或解释。
  • 首先检查下面的解决方案,然后想:我正在传递第一个和最后一个单元格的坐标来描述要迭代的范围 - 它与如何在给定范围内跳过行无关,如果行的第一个单元格是空的。
  • 检查我提供的解决方案?作为库的维护者,我知道方法的签名。但是,当您在没有附加信息的情况下传递参数时,您会掩盖问题。

标签: python excel row openpyxl skip


【解决方案1】:

谢谢你, 解决方案非常简单,我什至都在问:)

这里运行良好:

for row in ws.iter_rows(min_col=adres[0], min_row=adres[1], max_col=adres[2], max_row=adres[3]):
    if row[0].value is not None:
        data_rows.append([cell.value for cell in row])
    else: continue

【讨论】:

    【解决方案2】:

    以下可能是您想要的:

    def skip_empty_rows(ws):
        for row in ws.values:
            if row[0] is None:
               continue
            yield row
    
    df = pd.DataFrame((skip_empty_rows(ws))
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 2020-04-02
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多