Сортировать столбец в Worksheet с помощью Python - PullRequest
0 голосов
/ 05 июня 2018

В приведенной ниже программе я создал рабочую книгу, которая содержит рабочий лист с именем sort, в котором я поместил слова в один столбец, а Numbers - в другой столбец. Теперь я успешно вычислил файл .xlsxv. Но мне нужно, чтобы числа сортировались по убыванию.ВЕРНУТЬСЯ НА ЗАКАЗ.Я не знаю, как разместить код для этого.

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:

enter image description here

Необходимый вывод:

(Соответствующие слова, которые находятся в той же строке числа, также должны быть отсортированы)

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я бы порекомендовал загрузить исходный csv в качестве фрейма данных, а затем отсортировать его по определенному столбцу.Ниже я привел полностью воспроизводимый пример, который иллюстрирует это.

Я делаю свою собственную версию sort.csv для демонстрационных целей, затем считываю ее как кадр данных, используя pandas.read_csv, а затем сортирую, используя * 1004.*.

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:

Outputted sort.csv

Выведено wordsandnumbers.xlsx:

Outputted wordsandnumbers.xlsx

0 голосов
/ 05 июня 2018

После того, как вы получите данные в массив, их просто сортировать и поддерживать порядок.Вы можете просто использовать встроенную сортировку, но дать ей ключ, который является значением, по которому вы хотите отсортировать список на основе.См это .

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