Cómo ordenar la hoja de Excel usando Python

Estoy usando Python 3.4 y xlrd. Quiero ordenar la hoja de Excel según la columna principal antes de procesarla. ¿Hay alguna biblioteca para realizar esto?

Hay un par de maneras de hacer esto. La primera opción es utilizar xlrd , ya que tiene esta etiqueta. El mayor inconveniente de esto es que no escribe de forma nativa en formato XLSX.

Estos ejemplos utilizan un documento de Excel con este formato:

Diseño de Excel de texto

Utilizando xlrd y algunas modificaciones de esta respuesta :

 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 

Esto genera el siguiente libro de trabajo:

Salida XLRD


Otra opción (y una que puede utilizar la salida XLSX) es utilizar pandas . El código también es más corto:

 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() 

Esto produce:

Salida de pandas

En la llamada to_excel , el index se establece en False , por lo que el índice de dataframe de Pandas no se incluye en el documento de Excel. El rest de las palabras clave deben ser auto explicativas.