Как использовать регулярные выражения для обновления фрейма данных с помощью Python `MemoryError` - PullRequest
3 голосов
/ 01 июля 2019

У меня есть 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

Надеюсь, это может быть достаточно ясно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...