如何根据Openpyxl中单元格的最大值返回标题的字符串

问题描述 投票:0回答:3

早上好家伙! Openpyxl的快速问题:

我正在使用Python编辑xlsx文档并生成各种统计信息。我的部分脚本是生成单元格范围的最大值:

temp_list=[]
temp_max=[]

for row in sheet.iter_rows(min_row=3, min_col=10, max_row=508, max_col=13): 
    print(row)

    for cell in row:
        temp_list.append(cell.value)

    print(temp_list)
    temp_max.append(max(temp_list))
    temp_list=[]

我还希望能够打印包含所需单元格范围的最大值的列标题的字符串。我的数据结构如下所示:

Data Structure

有关如何这样做的任何想法?

谢谢!

python excel openpyxl
3个回答
0
投票

这似乎是一个典型的INDEX / MATCH Excel问题。

您是否尝试检索每个temp_list中最大值的索引?

您可以使用像numpy.argmax()这样的函数来获取“temp_list”数组中最大值的索引,然后使用此索引找到标题并将字符串附加到名为“max_headers”的新列表中。包含按出现顺序排列的所有标题字符串。

它看起来像这样

for cell in row:
        temp_list.append(cell.value)
        i_max = np.argmax(temp_list)
        max_headers.append(cell(row = 1, column = i_max).value)

等等等等。当然,为了实现这一点,你的temp_list应该是一个numpy数组而不是一个简单的python列表,并且必须定义max_headers列表。


0
投票

首先,感谢Bernardo的暗示。我找到了一个体面的工作解决方案但仍有一点问题。也许有人可以提供帮助。让我修改我的初始陈述:这是我现在正在使用的代码:

temp_list=[]
headers_list=[]

for row in sheet.iter_rows(min_row=3, min_col=27, max_row=508, max_col=32): #Index starts at 1 // Here we set the rows/columns containing the data to be analyzed
    for cell in row:
        temp_list.append(cell.value)
    for cell in row:
        if cell.value == max(temp_list):
            print(str(cell.column))
            print(cell.value)
            print(sheet.cell(row=1, column=cell.column).value)
            headers_list.append(sheet.cell(row=1,column=cell.column).value)
        else:
            print('keep going.')
    temp_list = []

这个公式有效,但有一点问题:例如,如果一行具有两次相同的值(即:25,9,25,8,9),则此循环将打印2个标题而不是一个。我的问题是:

我怎样才能让这个循环只考虑一行中最大值的第一个匹配?


0
投票

你可能想要这样的东西:

headers = [c for c in next(ws.iter_rows(min_col=27, max_col=32, min_row=1, max_row=1, values_only=True))]

for row in ws.iter_rows(min_row=3, min_col=27, max_row=508, max_col=32, values_only=True):
   mx = max(row)
   idx = row.index(mx)
   col = headers[idx]
© www.soinside.com 2019 - 2024. All rights reserved.