Мне нужна какая-то серьезная помощь, поскольку я относительно новичок в Python. Мне нужно выполнить задачу, которая будет считывать данные из Excel, а затем разрешить сортировку в порядке убывания. Сначала я начал работать, чтобы вставить словарь, поскольку в файле Excel есть строка заголовка, а затем тысячи строк, после которых хранятся данные. Я знаю, что словари не являются "сортируемыми" как таковыми, но я думал, что словарь будет лучшим подходом, учитывая то, что мне нужно. Тем не менее, мне интересно, может ли работать с DataFrame, но мне нужны все рекомендации, поскольку я изо всех сил пытаюсь понять это.
Мне нужно получить 3 крупнейших товара по акциям для каждого округа, включая товарное имя. Например, для первой строки, графство Линд, я хочу, чтобы вернулись: кукуруза - 19,52, крупный рогатый скот - 13,68, клубника - 12,31. Он также может быть похож на эту кукурузу: 19.52, крупный рогатый скот: 13.68, клубника: 12.31. Однако мне нужно сортировать данные по значениям для каждого товара.
Я нашел следующий код онлайн и использовал его для чтения Excel Data в структуру списка, которая состояла из словарей, но я не совсем уверен, что это лучший подход.
import xlrd
from xlrd import open_workbook
book = open_workbook('DictionaryProject.xlsx')
sheet = book.sheet_by_name('Sheet1')
keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]
dict_list =[]
for row_index in range(1, sheet.nrows):
d= {keys[col_index]: sheet.cell(row_index, col_index).value
for col_index in range(sheet.ncols)}
dict_list.append(d)
print(dict_list)
Вы можете использовать pandas
для анализа данных, а затем просто чистый python для отображения, но вы хотите.
df = pd.read_excel('filename.xlsx')
d = df.set_index('county').to_dict('index')
Например, для кадра данных
county cattle strawberry corn
0 CountyA 10 30 1
1 CountyB 2 2 2
2 CountyC 50 15 3
Вы получите
{'CountyA': {'cattle': 10, 'strawberry': 30, 'corn': 1},
'CountyB': {'cattle': 2, 'strawberry': 2, 'corn': 2},
'CountyC': {'cattle': 50, 'strawberry': 15, 'corn': 3}}
И вы можете сделать, например,
for k,v in d.items():
i = sorted(v.items(), key=lambda x: x[1], reverse=True)
print(k, ', '.join(['{}: {}'.format(com, value) for com, value in i]))
Вы также можете использовать f-strings
в соответствии с комментарием @jpp ниже
print(k, ', '.join([f'{com}: {value}' for com, value in i]))
который будет выводить
CountyA strawberry: 30, cattle: 10, corn: 1
CountyB cattle: 2, strawberry: 2, corn: 2
CountyC cattle: 50, strawberry: 15, corn: 3
f'{com}: {value}'
.