使用Openpyxl在Python 3中一次删除几列

时间:2018-11-30 15:56:42

标签: python python-3.x pandas openpyxl

在加载文件后,我尝试删除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处理所有事情?

2 个答案:

答案 0 :(得分:1)

如果依赖性不是太重,我建议为此使用熊猫。 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)

答案 1 :(得分:0)

您可以删除以最右边的索引开头的值。例如,从列表中删除第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]