我有一个非常大的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