【问题标题】:Delete several columns at once in Python 3 using Openpyxl使用 Openpyxl 在 Python 3 中一次删除多个列
【发布时间】:2018-11-30 15:56:41
【问题描述】:

加载文件后,我尝试删除 2 列,但每次删除 1 列时,我尝试删除的下一列的索引发生更改,因此我必须使用 index-1。如果它只有 2 列没问题,但如果我必须删除几列,我怎样才能一次完成所有操作?

for file in files:
fileName = os.path.splitext(file)[0]
if fileName == 'Any file name':
    wb = load_workbook(file)
    sheet = wb.active
    # Delete the first 3 rows
    sheet.delete_rows(1, 3)
    # Delete Column G
    sheet.delete_cols(7)
    # Delete Column L
    sheet.delete_cols(12)
    workbook.save(file)

我应该使用不同的东西,比如 numpy 还是使用 DataFrames 处理所有东西?

【问题讨论】:

  • 最好的选择是从右到左删除列,因为这意味着索引不会改变。

标签: python python-3.x pandas openpyxl


【解决方案1】:

您可以删除从最右边的索引开始的值。例如从列表中删除第 0、第 1 和第 2 个索引:

>>> x = [0,1,2,3,4,5,6]
>>> del x[2]
>>> del x[1]
>>> del x[0]
>>> x
[3, 4, 5, 6]

将该结果与您的方法进行比较,该方法从左到右删除:

>>> x = [0,1,2,3,4,5,6]
>>> del x[0]
>>> del x[1]
>>> del x[2]
>>> x
[1, 3, 5, 6]

【讨论】:

    【解决方案2】:

    如果依赖性不是太重,我建议为此使用 pandas。 Pandas 有一个 read_excel 函数,它在后台使用 Openpyxl,并且使用 Pandas DataFrames 通常符合人体工程学,并且对于您可能遇到的大多数问题,在线资源(并回答了堆栈溢出问题)要多得多。

    import pandas as pd
    
    for file in files:
        fileName = os.path.splitext(file)[0]
        if fileName == 'Any file name':
            df = pd.read_excel(file)
    
            # Delete the first 3 rows
            df = df.drop([0, 1, 2], axis = 0)
            df = df.drop([7, 12])
            # Or if your excel file is labeled
            # df = df.drop(["G", "L"])
            df.write_excel(fileName)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多