2011-04-12 271 views
2

我有一個非常大的ex​​cel文件,我需要刪除大約20,000行,只要滿足一個簡單條件,excel就不會讓我在使用過濾器時刪除這麼複雜的範圍。條件是:Python在excel電子表格中刪除一行

如果第一列包含值X,那麼我需要能夠刪除整行。

我想使用python和xlwt自動化,但我不太確定從哪裏開始。尋求一些代碼snippits讓我開始... 感謝您的任何幫助!

回答

9

請勿刪除。只需複製你需要的東西。

  1. 讀取原始文件
  2. 打開一個新文件
  3. 遍歷原始文件的行(如果該行的第一列不包含值X,該行添加到新的文件)
  4. 接近這兩個文件
  5. 新的文件重命名成原始文件
+0

舉個例子 – 2017-03-10 13:40:55

1

我喜歡使用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宏通常記錄片段,並與Python一起膠水他們,因爲我不喜歡的Visual Basic :-D。

+0

非常感謝!這真的很有幫助..但是我不能讓代碼運行。我正在使用一個mac - 有沒有辦法在OSX上使用COM對象? – Jane 2011-04-12 14:32:28

+0

它使用win32 api,它不能在Mac上運行。對不起,我不是OSX的人。但是,你能否將數據轉化爲csv,刪除數據,隱藏回來?這將是最簡單的方法。 – Fenikso 2011-04-12 15:42:07

+0

我不確定Excel如何在Mac上運行,但在Windows上,您可以再做一件事。 1)在第一列(Data/Filter/Autofilter)上創建自動過濾器,2)僅顯示具有「X」的行,4)選擇所有可見的行,3)刪除這些行,4)取消隱藏。無需精心編程。 – Fenikso 2011-04-12 15:45:34

0

如果你只需要刪除數據(而不是'擺脫'行,即它移動行),你可以嘗試使用我的模塊,PyWorkbooks。你可以在這裏獲取最新版本:

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

有一個PDF教程,指導您如何使用它。快樂的編碼!

-1

我實現用熊貓包.... 進口大熊貓作爲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) 
+0

在多個問題中剪切和粘貼相同的答案通常並不能很好地結束。爲每個問題定製答案,或者回答一個問題,並標記重複問題結束。刪除六個答案並不罕見。只是一個fyi – Drew 2016-01-06 06:03:30

0

可以使用,

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

將刪除行1至20,000在一個開放的Excel電子表格等等,

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

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