Python,Pandas删除Excel中的行

时间:2018-02-23 07:00:02

标签: python excel pandas dataframe

用于删除特定行的电子表格。

在保存到新电子表格之前,第一列的所有行都包含以“36”开头的值。

我使用这些代码(之后需要在Excel中拆分列)。示例如下所示:

enter image description here

import xlwt
from xlrd import open_workbook

old_file = open_workbook('C:\\original.xlsx')
old_sheet = old_file.sheet_by_index(0)

new_file = xlwt.Workbook(encoding='utf-8', style_compression = 0)
new_sheet = new_file.add_sheet('Sheet1', cell_overwrite_ok = True)

contents = []

for row in range(old_sheet.nrows):
    a = str(old_sheet.cell(row,0).value)
    b = str(old_sheet.cell(row,1).value)

    if not a.startswith("36"):
        contents.append(a + "," + b)

for c, content in enumerate(contents):
    new_sheet.write(c, 0, content)

new_file.save('C:\\result.xls')

这还不够,所以我想学习熊猫的方式。

我尝试过像df.drop([“3649”]这样的东西但它不起作用。

正确的Pandas删除行的方法是什么?谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您需要先read_excel,然后按boolean indexing进行过滤,~使用startswithcontains ^进行过滤。正则字符串开头的字符串):

df = pd.read_excel('C:\\original.xlsx')

df = df[~df['Model'].astype(str).str.startswith('36')]

替代:

df = df[~df['Model'].astype(str).str.contains('^36')]

print (df)
   Model Country
0   1021  France
1   9644   India
2   9656   India
4   9687   China
6   9630   Spain
7   9666  Brasil

和上一次to_excel

df.to_excel('C:\\result.xls', index=False)