У меня есть 2 проблемы, во-первых, что я хочу обновить некоторые значения в xlsm
файле, зависит от объекта python, так как этот объект является просто извлеченными значениями из определенного столбца в CSV-файле, так как для обновления значений в xlsm
файл dataframe через этот индекс исполняемого объекта, затем я создаю условия, содержащие loc
str.contains
Так что теперь давайте углубимся в
Вот в этом коде я просто читаю csv
и xlsm
file
#This Gov_Tracker master sheet dataframe
gov_tracker_sheet =pd.read_excel(r'' + mydir + 'Governance_Tracker - Copy -
Copy.xlsm', encoding='latin-1', sheet_name='Gov_Tracker',
header = 1)
myOutlook_inBox = pd.read_csv(r'' + mydir + 'test.CSV', usecols=['Subject',
'Body', 'From: (Name)', 'To: (Name)'],
encoding='latin-1')
Этот объект извлекает 5 символов и 5 чисел из определенного столбца в csv
replaced_sbj_value = myOutlook_inBox['Subject']
.str.extract(pat='(L(?:DEL|CAI|SIN).\d{5})').dropna()
Этот столбец я хочу отфильтровать в xlsm
myOutlook_inBox["Subject"] = replaced_sbj_value
Это одно из моих простых условий, с которыми я работаю
frm_mwfy_to_te = myOutlook_inBox.loc[myOutlook_inBox['From:
(Name)'].str.contains("mowafy", na=False) \
& myOutlook_inBox['To:
(Name)'].str.contains("te", na=False)] \
.drop_duplicates(keep=False)
Этот объект просто фильтруется в gov_tracker_sheet
Where
frm_mwfy_to_te.Subject
с использованием join
и str.contains
filtered_data_cond1 = gov_tracker_sheet.loc[gov_tracker_sheet['Site
Name'].str.contains('|'.join(frm_mwfy_to_te.Subject))]
После этого я создал объект tuple
и вставил в него filtered_data_cond1['SiteCode']
values = tuple(filtered_data_cond1['SiteCode'].values.tolist())
Наконец, я использовал функцию регулярного выражения, чтобы заменить нужные мне значения в соответствии сусловие, которое я создал
updated_gov_tracker = gov_tracker_sheet.replace(to_replace =
gov_tracker_sheet['Pending '].values, value = 'TETE', regex=True)\
.where((values))
После запуска проекта я нахожу этоошибка в RUN
Traceback (most recent call last):
File "C:/Users/DELL/PycharmProjects/GovTrackerExcelTool
/GovTrackerUpdatingScript.py",
line 55, in <module>
updated_gov_tracker = gov_tracker_sheet.replace(to_replace =
gov_tracker_sheet['Pending '].values, value = 'TETE',
regex=True).where((values))
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\frame.py", line 4042, in replace
method=method)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\generic.py", line 6552, in replace
regex=regex)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\internals\managers.py", line 537, in replace
return self.apply('replace', **kwargs)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\internals\managers.py", line 395, in apply
applied = getattr(b, f)(**kwargs)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\internals\blocks.py", line 2781, in replace
convert=convert)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\internals\blocks.py", line 2880, in _replace_single
new_values[filt] = f(new_values[filt])
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\numpy\lib\function_base.py", line 2091, in __call__
return self._vectorize_call(func=func, args=vargs)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\numpy\lib\function_base.py", line 2167, in _vectorize_call
outputs = ufunc(*inputs)
File "C:\Users\DELL\PycharmProjects\GovTrackerExcelTool\venv\lib\site-
packages\pandas\core\internals\blocks.py", line 2868, in re_replacer
return rx.sub(value, s)
MemoryError
Это моя первая проблема
Итак, моя вторая проблема была, после того как я обновил этот фрейм данных gov_tracker_sheet
Я хочу заменить старый лист в xlsm
с новым обновленным dataframe
Надеюсь, это может быть достаточно ясно