Python Forum
OpenPyxl: How to iterate through each Column (in 1 row) to find a value? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: OpenPyxl: How to iterate through each Column (in 1 row) to find a value? (/thread-28608.html)



OpenPyxl: How to iterate through each Column (in 1 row) to find a value? - chatguy - Jul-26-2020

When using Python OpenPyxl, how would I iterate through each Column (in only one row) to find a value?

Here's my current (failing) attempt -- (There appears to be an error in (at least) my 2nd for loop.)

book = openpyxl.load_workbook(excelFile)
for sheet in book.worksheets: #For each worksheet
    for colidx in sheet.iter_cols(sheet.min_col,sheet.max_col): #For each Column in a worksheet
        if sheet.cell(1,colidx).value == "ValueImLookingFor": #Search each Column in only Row #1 for value
            print ("Found ValueImLookingFor in COLUMN " + colidx)
ps: Xposted elsewhere last week, but no working answers yet. I'll post the answer to both forums once found.
Thanks so much in advance,
CG


RE: OpenPyxl: How to iterate through each Column (in 1 row) to find a value? - palladium - Jul-27-2020

Can you please share what error message(s) you are getting?

That aside, it looks like iter_cols takes three arguments, min_row, max_col, max_row. I think you may have passed the wrong arguments here. Doesn't look like you can pass a min_col either. See https://openpyxl.readthedocs.io/en/stable/tutorial.html.

Try (let me know if it works!) :
book = openpyxl.load_workbook(excelFile)
for sheet in book.worksheets:
     col_range = sheet[sheet.min_column : sheet.max_column]
     for colidx in col_range:
         if sheet.cell(1,colidx).value == "ValueImLookingFor": #Search each Column in only Row #1 for value
            print ("Found ValueImLookingFor in COLUMN " + colidx)
I prefer to use pandas for complicated logic operations as I find it much more flexible.


RE: OpenPyxl: How to iterate through each Column (in 1 row) to find a value? - carlhyde - Apr-06-2021

Iterating through pandas dataFrame objects is generally slow. Pandas iteration beats the whole purpose of using DataFrame. It is an anti-pattern and is something you should only do when you have exhausted every other option. It is better look for a List Comprehensions , vectorized solution or DataFrame.apply() method.

Pandas DataFrame loop using list comprehension

result = [(x, y,z) for x, y,z in zip(df['Name'], df['Promoted'],df['Grade'])]