【问题标题】:Python to delete a row in excel spreadsheetPython删除excel电子表格中的一行
【发布时间】:2011-04-12 12:19:49
【问题描述】:

我有一个非常大的 excel 文件,我需要删除大约 20,000 行,这取决于满足一个简单的条件,并且在使用过滤器时,excel 不会让我删除如此复杂的范围。条件是:

如果第一列包含值 X,那么我需要能够删除整行。

我正在尝试使用 python 和 xlwt 自动执行此操作,但不太确定从哪里开始。寻找一些代码片段让我开始...... 感谢您提供的任何帮助!

【问题讨论】:

    标签: python excel xlwt


    【解决方案1】:

    我已经使用 Pandas 包实现了这一点......

    import pandas as pd
    
    #Read from Excel
    xl= pd.ExcelFile("test.xls")
    
    #Parsing Excel Sheet to DataFrame
    dfs = xl.parse(xl.sheet_names[0])
    
    #Update DataFrame as per requirement
    #(Here Removing the row from DataFrame having blank value in "Name" column)
    
    dfs = dfs[dfs['Name'] != '']
    
    #Updating the excel sheet with the updated DataFrame
    
    dfs.to_excel("test.xls",sheet_name='Sheet1',index=False)
    

    【讨论】:

    • 在多个问题中剪切和粘贴相同的答案通常不会很好。为每个问题量身定制答案,或回答好一个问题,并标记重复的问题结束。删除六个答案并不少见。仅供参考
    【解决方案2】:

    不要删除。只需复制您需要的内容即可。

    1. 读取原文件
    2. 打开一个新文件
    3. 遍历原始文件的行(如果该行的第一列不包含值 X,则将此行添加到新文件中)
    4. 关闭这两个文件
    5. 将新文件重命名为原文件

    【讨论】:

    • 举个例子
    【解决方案3】:

    我喜欢使用 COM 对象来获得这种乐趣:

    import win32com.client
    from win32com.client import constants
    
    f = r"h:\Python\Examples\test.xls"
    DELETE_THIS = "X"
    
    exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
    exc.Visible = 1
    exc.Workbooks.Open(Filename=f)
    
    row = 1
    while True:
        exc.Range("B%d" % row).Select()
        data = exc.ActiveCell.FormulaR1C1
        exc.Range("A%d" % row).Select()
        condition = exc.ActiveCell.FormulaR1C1
    
        if data == '':
            break
        elif condition == DELETE_THIS:
            exc.Rows("%d:%d" % (row, row)).Select()
            exc.Selection.Delete(Shift=constants.xlUp)
        else:
            row += 1
    
    # Before
    # 
    #      a
    #      b
    # X    c
    #      d
    #      e
    # X    d
    #      g
    #        
    
    # After
    #
    #      a
    #      b
    #      d
    #      e
    #      g
    

    我通常记录 Excel 宏的 sn-ps 并将它们与 Python 粘合在一起,因为我不喜欢 Visual Basic :-D。

    【讨论】:

    • 非常感谢!这真的很有帮助..但是我无法运行代码。我使用的是 Mac——有没有办法在 OSX 上使用 COM 对象?
    • 它使用win32 api,不能在Mac上运行。对不起,我不是 OSX 人。但是,您能否将数据转换为 csv、删除数据、隐蔽回来?那将是最简单的方法。
    • 我不确定 Excel 在 Mac 上的工作方式,但在 Windows 上,您可以再做一件事。 1)在第一列(数据/过滤器/自动过滤器)上创建自动过滤器,2)仅显示带有“X”的行,4)选择所有可见行,3)删除这些行,4)取消隐藏。无需复杂的编程。
    【解决方案4】:

    你可以使用,

    sh.Range(sh.Cells(1,1),sh.Cells(20000,1)).EntireRow.Delete()
    

    将删除打开的 Excel 电子表格中的第 1 到 20,000 行,

    if sh.Cells(1,1).Value == 'X':
    
       sh.Cells(1,1).EntireRow.Delete()
    

    【讨论】:

      【解决方案5】:

      您可以尝试使用 csv 阅读器:

      http://docs.python.org/library/csv.html

      【讨论】:

        【解决方案6】:

        如果您只需要删除数据(而不是“删除”行,即移动行),您可以尝试使用我的模块 PyWorkbooks。您可以在此处获取最新版本:

        https://sourceforge.net/projects/pyworkbooks/

        有一个 pdf 教程来指导您如何使用它。编码愉快!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-28
          • 1970-01-01
          • 2010-11-19
          • 2013-07-03
          • 1970-01-01
          • 1970-01-01
          • 2013-01-23
          • 2020-03-14
          相关资源
          最近更新 更多