#python #excel
#питон #превосходить
Вопрос:
Я моделирую изменение определенного значения ячейки в Excel путем изменения 3 соседних столбцов в Excel с помощью команд через Python. Значения этих трех столбцов будут выбраны из комбинации значений 12 * 11 * 9
(1188 итераций).
Основной лист Excel и доступные столбцы
Столбцы, доступные для столбца Катода
Колонки, доступные для анодной колонки
Столбцы, доступные для столбца Lam
Мой код до сих пор выглядит следующим образом, к сожалению, я не знаю, как перебирать комбинации доступных столбцов, передавать их в расчет и сохранять значение ключа:
import pandas as pd path="C:\Users\MuellerM\CSV\Book1.xlsx" dfff = pd.read_excel('C:\Users\MuellerM\CSV\Book1.xlsx', sheet_name='Sheet1',header=0, engine='openpyxl') kathode_cols = pd.read_excel('C:\Users\MuellerM\CSV\Book1.xlsx',sheet_name='Katodes',header=0, engine='openpyxl') anode_cols = pd.read_excel('C:\Users\MuellerM\CSV\Book1.xlsx',sheet_name='Anodes',header=0, engine='openpyxl') Lam_cols = pd.read_excel('C:\Users\MuellerM\CSV\Book1.xlsx',sheet_name='Lambs',header=0, engine='openpyxl') for i in range(len(kathode_cols.columns)): dfff.loc[:, 'Katode'] = kathode_cols.loc[:, kathode_cols.columns[i]] for j in range(len(anode_cols.columns)): dfff.loc[:, 'Anode'] = anode_cols.loc[:, anode_cols.columns[j]] for k in range(len(Lam_cols.columns)): dfff.loc[:, 'Lam'] = Lam_cols.loc[:, Lam_cols.columns[k]] KeyValue{i,j,k}=dfff['Key'][0]
Я только начал моделировать на Python, надеюсь, то, о чем я спрашиваю, не слишком сложно.
Ответ №1:
Я думаю, сначала вам нужно указать путь к вашему файлу, чтобы read_excel
:
dfff = pd.read_excel('path/to/your/file.xslx', sheet_name='Sheet1', header=0)
и чем вы могли бы хранить другие значения в разных кадрах данных:
kathode_cols = pd.read_excel('path/to/kathode_columns.xslx', sheet_name=lt;whatever sheetname you usedgt;, header=0)
и так далее для других файлов.
И чем вы могли бы сказать что-то вроде:
for i in range(len(kathode_cols.columns)): dfff.loc[:, 'Kathode'] = kathode_cols.loc[:, kathode_cols.columns[0]] # do some further calculations...
Что должно заменить значения dff
в столбце «Катод» значениями в одном из столбцов «kathode_columns». И чем вы можете заняться дальнейшими расчетами или чем бы вы ни планировали заняться.
Надеюсь, это вам поможет?
Редактировать:
небольшой пример, показывающий вам, что я имею в виду. У меня нет ваших данных, и я был слишком ленив, чтобы печатать, поэтому я просто использовал некоторые фантастические цифры
import pandas as pd # making your DataFrame dfff = {'Kathode': [0 for _ in range(10)], 'Anode': [2 for _ in range(10)], 'Lam': [4 for _ in range(10)]} dfff = pd.DataFrame(dfff) # making the other DataFrames containing the different comuns kathode_cols = {i: [(1.5 i)*j for j in range(10)] for i in range(5)} kathode_cols = pd.DataFrame(kathode_cols) anode_cols = {i: [(0.5 i)*j for j in range(10)] for i in range(5)} anode_cols= pd.DataFrame(anode_cols) lam_cols = {i: [(1 i)*j for j in range(10)] for i in range(5)} lam_cols= pd.DataFrame(lam_cols) # here go your results results = [] # iterate throug all the possible combinations for a in kathode_cols.columns: dfff.loc[:, 'Kathode'] = kathode_cols[a] for b in anode_cols.columns: dfff.loc[:, 'Anode'] = anode_cols[b] for c in lam_cols: dfff.loc[:, 'Lam'] = lam_cols[c] # do your calculations here result = dfff['Kathode'].sum() dfff['Anode'].sum() - 2*dfff['Lam'].sum() # store your results results.append(result)
Это делает некоторые фантастические вычисления с различными столбцами и сохраняет их в списке — все в python. Это, конечно, не самая эффективная реализация, но я думаю, что она должна это сделать.
Надеюсь, это вам поможет
Комментарии:
1. Андре, это, безусловно, мне очень помогает. Но как я могу повторять различные комбинации столбцов и сохранять значение ключа (значение ячейки в excel) для каждой итерации? В принципе, я ничего математически не вычисляю в Python, а только в Excel.
2. вам действительно нужно оставаться в Excel? Потому что я понятия не имею, как запустить вычисление в Esxcel из скрипта python. Если это возможно, я бы рекомендовал вам просто остаться в python. Я подготовлю для вас небольшой пример сценария, показывающий вам, что я имею в виду 😉