Я не уверен, поможет ли это вам точно, но, возможно, оно поможет вам в правильном направлении. Вы можете использовать Pandas.DataFrame.itertuples () для запуска по всем строкам в вашем фрейме данных, выбирая значения по мере необходимости.
Я пошел немного дальше и создал быстрый словарь меток столбцов, чтобы помочь синхронизировать вложенные циклы.
Я пытался комментировать, где это необходимо, но если вы что-то не поняли, дайте мне знать!
import pandas as pd
import openpyxl
wb = load_workbook(filename='./generic_workbook_name.xlsx')
# Created smoe data for a dataframe.
fake_data_dict = {
'OpNo':['1','2','3','4',],
'StationNo':['11','22','33','44',],
'Spindle':['S1','S2','S3','S4',],
'OpDescription':['This','is','a','description',]
}
# Create the dataframe.
data = pd.DataFrame(fake_data_dict)
Наш фрейм данных:
OpNo StationNo Spindle OpDescription
0 1 11 S1 This
1 2 22 S2 is
2 3 33 S3 a
3 4 44 S4 description
Остальная часть сценария:
col_list = ['OpNo','StationNo','Spindle','OpDescription']
# Create a column label dictionary; Add 1 to index for Excel cells
col_dict = {i+1:v for i, v in enumerate(col_list)}
# Iterate over each row
for idx, row in enumerate(data.itertuples(), start = 1):
# For each key in our column dictionary [0, 1, 2, 3]
for key in col_dict.keys():
print('Row: {a}\n\tColumn: {b}\n\t\tValue: {c}'.format(a = idx, b = key,
# Reduce the index by 1; Get column name based on key value.
c = data.loc[idx - 1, col_dict[key]]))
Выход:
Row: 1
Column: 1
Value: 1
Row: 1
Column: 2
Value: 11
Row: 1
Column: 3
Value: S1
Row: 1
Column: 4
Value: This
Row: 2
Column: 1
Value: 2
Row: 2
Column: 2
Value: 22
Row: 2
Column: 3
Value: S2
Row: 2
Column: 4
Value: is
Row: 3
Column: 1
Value: 3
Row: 3
Column: 2
Value: 33
Row: 3
Column: 3
Value: S3
Row: 3
Column: 4
Value: a
Row: 4
Column: 1
Value: 4
Row: 4
Column: 2
Value: 44
Row: 4
Column: 3
Value: S4
Row: 4
Column: 4
Value: description
Имея это в виду, это может упростить ваш сценарий:
for idx, row in enumerate(data.itertuples(), start = 1):
for key in col_dict.keys():
wb['OneOpSheet'].cell(row = (idx + 11), column = (key + 1)).value = data.loc[idx - 1, col_dict[key]]