在下面的程序中,我创建了一个包含名为sort的工作表的工作簿 我将单词放在一列中,将Numbers放在另一列中 现在我已成功输出.xlsxv文件 但我需要将数字从DESCENDING到ASCENDING ORDER排序。 我不知道如何为此代码。
Code
=====
import csv
import xlsxwriter
import re
workbook = xlsxwriter.Workbook('wordsandnumbers.xlsx')
worksheet = workbook.add_worksheet('sort')
with open('sort.csv') as f:
reader = csv.reader(f)
alist = list(reader)
worksheet.write(2,0,'words')
worksheet.write(2,1,'Numbers')
newlist = []
for values in alist:
convstr = str(values)
convstr = convstr.split(",")
newlist.extend(convstr)
a=3
for i in range(3,10):
newlist[a] = re.sub('[^a-zA-Z]','',newlist[a])
worksheet.write(i,0,newlist[a].strip('['))
a=a+1
newlist[a] = re.sub('[^0-9]','',newlist[a])
int(newlist[a])
worksheet.write(i,1,newlist[a])
a=a+1
workbook.close()
我输入.xlsx表的输出是:
需要输出:
(同一行号中的相应单词也应该排序)
答案 0 :(得分:1)
一旦将数据输入数组,就可以直接对数据进行排序并维护顺序。您可以使用内置排序,但为其提供一个键,您希望列表根据该值排序。请参阅this。
import csv
import xlsxwriter
import re
workbook = xlsxwriter.Workbook('wordsandnumbers.xlsx')
worksheet = workbook.add_worksheet('sort')
with open('./sort.csv') as f:
reader = csv.reader(f)
alist = list(reader)
worksheet.write(2,0,'words')
worksheet.write(2,1,'Numbers')
#Here convert the number to an integer
newerlist = [[x[0], int(x[1])] for x in alist[1:]]
print(newerlist)
#key is the function applied to the arguments to get the answer and lambda
#is just a 1 line way to write a function f(x) which returns x[1] (the number in the rows)
newerlist.sort(key = lambda x : x[1], reverse = True)
a=3
for i in range(3,9):
for j in range(0,2):
worksheet.write(i,j,str(newerlist[i-a][j]))
workbook.close()
答案 1 :(得分:1)
我建议将原始csv作为数据框加载,然后按特定列对其进行排序。我在下面提供了一个完全可重现的例子来说明这一点。
我为了演示目的制作了我自己的sort.csv版本,然后使用pandas.read_csv
将其作为数据框读取,然后使用pandas.DataFrame.sort_values
进行排序。
import pandas as pd
sort = open('sort.csv', 'w+')
sort.write('May, 5227\n')
sort.write('June, 417\n')
sort.write('Jan, 4\n')
sort.write('Feb, 424\n')
sort.write('Dec, 36\n')
sort.write('Mar, 4981\n')
sort.write('Apr, 3460\n')
sort.close()
df = pd.read_csv('sort.csv', names = ['words', 'Numbers'])
df = df.sort_values(['Numbers'], ascending=[False])
writer = pd.ExcelWriter('wordsandnumbers.xlsx', engine='xlsxwriter')
df.to_excel(writer, index=False, startrow=2)
writer.save()
输出sort.csv:
输出的wordsandnumbers.xlsx: