使用Python对Excel中的列数据进行排序
有没有办法从excel工作表中提取列,将列作为列表写入,对其进行排序,然后将其重写到另一个excel工作表中?这是我到目前为止尝试过的,但它只写入最后一列数据。我不需要前两行数据,因为它们只是标题使用Python对Excel中的列数据进行排序,python,excel,xlrd,xlsxwriter,Python,Excel,Xlrd,Xlsxwriter,有没有办法从excel工作表中提取列,将列作为列表写入,对其进行排序,然后将其重写到另一个excel工作表中?这是我到目前为止尝试过的,但它只写入最后一列数据。我不需要前两行数据,因为它们只是标题 import xlrd import xlsxwriter wb = xlrd.open_workbook('exceldata.xlsx') ws = wb.sheet_by_index(0) col=[] for i in range(2,ws.ncols): col=ws.col_
import xlrd
import xlsxwriter
wb = xlrd.open_workbook('exceldata.xlsx')
ws = wb.sheet_by_index(0)
col=[]
for i in range(2,ws.ncols):
col=ws.col_values(i)
for x in range(2):
col.pop(0)
col.sort()
workbook = xlsxwriter.Workbook('test_sorting.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_column('A1',col)
workbook.close()
更新:这是成功的,但有人知道如何简化吗?
import xlrd
import xlsxwriter
wb = xlrd.open_workbook('exceldata.xlsx')
ws = wb.sheet_by_index(0)
col1=ws.col_values(2)
for x in range(2):
col1.pop(0)
col1.sort()
col2=ws.col_values(3)
for x in range(2):
col2.pop(0)
col2.sort()
col3=ws.col_values(4)
for x in range(2):
col3.pop(0)
col3.sort()
col4=ws.col_values(5)
for x in range(2):
col4.pop(0)
col4.sort()
col5=ws.col_values(6)
for x in range(2):
col5.pop(0)
col5.sort()
columns=[]
for i in range(2,7):
col=ws.col_values(i)
columns.append(col)
print(columns)
workbook = xlsxwriter.Workbook('test_sorting.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_column('A2',col1)
worksheet.write_column('B2',col2)
worksheet.write_column('C2',col3)
worksheet.write_column('D2',col4)
worksheet.write_column('E2',col5)
workbook.close()我认为您需要在列表“col”中添加()或扩展()列名称。目前,每次FOR循环迭代时,它都会替换'i'的值
也许是这样的:
col.append(ws.col_值(i))
另外,这是我关于堆栈溢出的第一个答案。希望能有帮助。我还没有测试它(我会测试它,如果需要的话会更新答案)。我已经尝试过了,但是我得到了以下错误:“你不需要弹出任何值。”。您只需检索以第二个元素开头的值:
ws.col\u values(3,1)
返回以D2开头的值列表。虽然我认为xlrd是读取Excel文件的最佳软件包,但它没有最好的文档。您应该查看旧版本的xlrd部分。是的,它已经过时了,但它仍然比“官方”xlrd文档要好。最后的循环,即构建列
,是正确的想法。您可以使用columns
而不是col1
、col2
等。请注意,columns
是一个列表,其中的元素也是列表,因此可以单独引用和操作。例如,在上面的代码中,列[2]
包含与col3
相同的数据(弹出和排序除外)。如何弹出和排序列中的数据?最简单的方法是在构建列
时,在将其附加到列
之前立即对列
执行所需操作。