从excel中获取数据并使用Python 3.6对其进行排序的最佳方法

从excel中获取数据并使用Python 3.6对其进行排序的最佳方法,python,list,dictionary,dataframe,data-structures,Python,List,Dictionary,Dataframe,Data Structures,我需要一些主要的帮助,因为我对Python比较陌生。我需要执行一项任务,从Excel中读取数据,然后允许我按降序排序。最初,我开始将Excel文件放入字典,因为Excel文件有一个标题行,然后有数千行包含数据。我知道字典本身并不是“可排序的”,但考虑到我的需要,我认为字典是最好的方法。然而,我想知道,也许一个数据框架可以工作,但需要任何和所有的指导,因为我正在努力解决这个问题 我需要得到每个县的3个最大的商品份额,包括商品名称。例如,对于第一排,林德县,我想要以下返回值-玉米-19.52,牛-1

我需要一些主要的帮助,因为我对Python比较陌生。我需要执行一项任务,从Excel中读取数据,然后允许我按降序排序。最初,我开始将Excel文件放入字典,因为Excel文件有一个标题行,然后有数千行包含数据。我知道字典本身并不是“可排序的”,但考虑到我的需要,我认为字典是最好的方法。然而,我想知道,也许一个数据框架可以工作,但需要任何和所有的指导,因为我正在努力解决这个问题

我需要得到每个县的3个最大的商品份额,包括商品名称。例如,对于第一排,林德县,我想要以下返回值-玉米-19.52,牛-13.68,草莓-12.31。它也可能是这样的玉米:19.52,牛:13.68,草莓:12.31。但是,我需要按每种商品的值对数据进行排序

我在网上找到了以下代码,并使用它将Excel数据读入由字典组成的列表结构,但我不确定这是否是最好的方法

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]))
您也可以根据@jpp下面的评论使用
f-strings

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-strings(python3.6+),即
f'{com}:{value}'
。我想我了解其中的绝大多数内容,而且它似乎很简单,所以谢谢你。我要试一试。不过,你能解释一下最后一行吗。我看到它包含了一个列表理解,我看到了它输出的内容,但只是在努力了解它是如何工作的。非常感谢!JPP-你能解释一下使用f字符串的好处吗?我对这个概念不太熟悉。我得到了以下错误-TypeError:“@jpp,谢谢你的建议:)@Shawn,当你尝试比较float和string时会发生这种情况。您的
.items()
中是否有任何字符串?