如何使用Python对Excel表格进行排序

7

我正在使用Python 3.4和xlrd。在处理数据之前,我希望按照主列对Excel表进行排序。是否有相关的库可以实现这个功能?


获取列表中的列,然后使用 sorted(list) 进行排序。 - runDOSrun
2个回答

13
有几种方法可以实现这个目标。第一种选择是利用你所标记的xlrd。最大的缺点是它不能本地写入XLSX格式。
这些示例使用具有此格式的Excel文档: Text Excel Layout 利用xlrd和来自此答案的一些修改:
import xlwt
from xlrd import open_workbook

target_column = 0     # This example only has 1 column, and it is 0 indexed

book = open_workbook('test.xlsx')
sheet = book.sheets()[0]
data = [sheet.row_values(i) for i in xrange(sheet.nrows)]
labels = data[0]    # Don't sort our headers
data = data[1:]     # Data begins on the second row
data.sort(key=lambda x: x[target_column])

bk = xlwt.Workbook()
sheet = bk.add_sheet(sheet.name)

for idx, label in enumerate(labels):
     sheet.write(0, idx, label)

for idx_r, row in enumerate(data):
    for idx_c, value in enumerate(row):
        sheet.write(idx_r+1, idx_c, value)

bk.save('result.xls')    # Notice this is xls, not xlsx like the original file is

这将输出以下工作簿:

XLRD output


另一个选项(也可以利用XLSX输出)是使用pandas。 代码也更简洁:

import pandas as pd

xl = pd.ExcelFile("test.xlsx")
df = xl.parse("Sheet1")
df = df.sort(columns="Header Row")

writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer,sheet_name='Sheet1',columns=["Header Row"],index=False)
writer.save()

这将输出:

Pandas 输出

to_excel 函数中,设置了 indexFalse,因此 Pandas dataframe 的索引不会包含在 Excel 文档中。其余的关键字应该是很容易理解的。


8

我只是想更新一下答案,因为Pandas的实现方式随着时间的推移已经有所改变。以下是现在应该可以工作的代码(Pandas 1.1.2)。

import pandas as pd

xl = pd.ExcelFile("test.xlsx")
df = xl.parse("Sheet1")
df = df.sort_values(by="Header Row")
...

sort函数现在称为sort_by,而columns被替换为by


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接