Лучший способ получить данные из Excel и отсортировать их с помощью Python 3.6

1

Мне нужна какая-то серьезная помощь, поскольку я относительно новичок в 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)

Изображение 174551

Теги:
dataframe
list
dictionary
data-structures

1 ответ

3
Лучший ответ

Вы можете использовать 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
  • 1
    Хорошее решение. Я также рекомендовал бы f-строки (Python 3.6+), т.е. f'{com}: {value}' .
  • 1
    Я думаю, я понимаю подавляющее большинство этого, и это кажется достаточно простым, так что спасибо. Я попробую. Однако не могли бы вы объяснить последнюю строчку немного? Я вижу, что он включает в себя понимание списка, и я вижу, что он выводит, но просто стараюсь точно понять, как он работает. Спасибо!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню