我正在使用Python 3.4和xlrd。我想在处理之前根据主列对Excel工作表进行排序。有没有图书馆可以执行此操作?
答案 0 :(得分:10)
有几种方法可以做到这一点。第一个选项是使用xlrd
,因为您已标记此标记。最大的缺点是它本身不能写入XLSX格式。
这些示例使用具有以下格式的Excel文档:
利用xlrd
以及此answer的一些修改:
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
这将输出以下工作簿:
另一个选项(以及可以利用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()
输出:
在to_excel
调用中,index
设置为False
,因此Pandas数据框索引不包含在Excel文档中。其余的关键字应该是自我解释的。
答案 1 :(得分:2)
我只是想刷新答案,因为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
取代。