我有一個非常大的excel文件,我需要刪除大約20,000行,只要滿足一個簡單條件,excel就不會讓我在使用過濾器時刪除這麼複雜的範圍。條件是:Python在excel電子表格中刪除一行
如果第一列包含值X,那麼我需要能夠刪除整行。
我想使用python和xlwt自動化,但我不太確定從哪裏開始。尋求一些代碼snippits讓我開始... 感謝您的任何幫助!
我有一個非常大的excel文件,我需要刪除大約20,000行,只要滿足一個簡單條件,excel就不會讓我在使用過濾器時刪除這麼複雜的範圍。條件是:Python在excel電子表格中刪除一行
如果第一列包含值X,那麼我需要能夠刪除整行。
我想使用python和xlwt自動化,但我不太確定從哪裏開始。尋求一些代碼snippits讓我開始... 感謝您的任何幫助!
請勿刪除。只需複製你需要的東西。
您可以嘗試使用CSV閱讀:
我喜歡使用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。
非常感謝!這真的很有幫助..但是我不能讓代碼運行。我正在使用一個mac - 有沒有辦法在OSX上使用COM對象? – Jane 2011-04-12 14:32:28
它使用win32 api,它不能在Mac上運行。對不起,我不是OSX的人。但是,你能否將數據轉化爲csv,刪除數據,隱藏回來?這將是最簡單的方法。 – Fenikso 2011-04-12 15:42:07
我不確定Excel如何在Mac上運行,但在Windows上,您可以再做一件事。 1)在第一列(Data/Filter/Autofilter)上創建自動過濾器,2)僅顯示具有「X」的行,4)選擇所有可見的行,3)刪除這些行,4)取消隱藏。無需精心編程。 – Fenikso 2011-04-12 15:45:34
如果你只需要刪除數據(而不是'擺脫'行,即它移動行),你可以嘗試使用我的模塊,PyWorkbooks。你可以在這裏獲取最新版本:
https://sourceforge.net/projects/pyworkbooks/
有一個PDF教程,指導您如何使用它。快樂的編碼!
我實現用熊貓包.... 進口大熊貓作爲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)
在多個問題中剪切和粘貼相同的答案通常並不能很好地結束。爲每個問題定製答案,或者回答一個問題,並標記重複問題結束。刪除六個答案並不罕見。只是一個fyi – Drew 2016-01-06 06:03:30
可以使用,
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()
舉個例子 – 2017-03-10 13:40:55