大家早上好! 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=[]
我还希望能够打印包含所需单元格范围最大值的列标题的字符串。我的数据结构如下:
有什么想法吗?
谢谢!
答案 0 :(得分: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列表。
答案 1 :(得分:0)
首先,感谢贝尔纳多的提示。我找到了一个可以正常工作的解决方案,但仍然有一个小问题。也许有人可以提供帮助。 让我修改我的初始声明:这是我现在正在使用的代码:
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个标题而不是一个。我的问题是:
如何让此循环仅考虑一行中最大值的第一个匹配项?
答案 2 :(得分:0)
您可能想要这样的东西:
string