【问题标题】:Best way to get data from excel and sort it using Python 3.6从 excel 中获取数据并使用 Python 3.6 对其进行排序的最佳方法
【发布时间】:2018-08-04 19:54:15
【问题描述】:

我需要一些重要的帮助,因为我对 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)

【问题讨论】:

    标签: python list dictionary dataframe data-structures


    【解决方案1】:

    您可以使用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 (Python 3.6+),即f'{com}: {value}'.
    • 我想我理解了其中的大部分内容,而且看起来很简单,所以谢谢。我会试一试。但是,您能否稍微解释一下最后一行。我看到它包含一个列表理解,我看到它输出了什么,但只是努力了解它是如何工作的。非常感谢!
    • JPP - 你能解释一下使用 f-strings 的好处吗?我对这个概念不太熟悉。
    • 我收到以下错误 - TypeError: '
    • @jpp,感谢您的建议:) @Shawn,当您尝试比较浮点数和字符串时会发生这种情况。你的.items() 中有字符串吗?
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2016-04-07
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多