从excel中获取数据并使用Python 3.6对其进行排序的最佳方法
我需要一些主要的帮助,因为我对Python比较陌生。我需要执行一项任务,从Excel中读取数据,然后允许我按降序排序。最初,我开始将Excel文件放入字典,因为Excel文件有一个标题行,然后有数千行包含数据。我知道字典本身并不是“可排序的”,但考虑到我的需要,我认为字典是最好的方法。然而,我想知道,也许一个数据框架可以工作,但需要任何和所有的指导,因为我正在努力解决这个问题 我需要得到每个县的3个最大的商品份额,包括商品名称。例如,对于第一排,林德县,我想要以下返回值-玉米-19.52,牛-13.68,草莓-12.31。它也可能是这样的玉米:19.52,牛:13.68,草莓:12.31。但是,我需要按每种商品的值对数据进行排序 我在网上找到了以下代码,并使用它将Excel数据读入由字典组成的列表结构,但我不确定这是否是最好的方法从excel中获取数据并使用Python 3.6对其进行排序的最佳方法,python,list,dictionary,dataframe,data-structures,Python,List,Dictionary,Dataframe,Data Structures,我需要一些主要的帮助,因为我对Python比较陌生。我需要执行一项任务,从Excel中读取数据,然后允许我按降序排序。最初,我开始将Excel文件放入字典,因为Excel文件有一个标题行,然后有数千行包含数据。我知道字典本身并不是“可排序的”,但考虑到我的需要,我认为字典是最好的方法。然而,我想知道,也许一个数据框架可以工作,但需要任何和所有的指导,因为我正在努力解决这个问题 我需要得到每个县的3个最大的商品份额,包括商品名称。例如,对于第一排,林德县,我想要以下返回值-玉米-19.52,牛-1
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()
中是否有任何字符串?