Фильтрация таблицы включающая в себя словари

Есть вот такой код:

import win32com.client
import pandas as pd
import datetime as dt

today = dt.date.today()
year = today.year #Объявление нынешнего года
month = today.month #Объявление нынешнего месяца
day1 = 22 #int(input("Введите начало: "))
day2 = 25 #int(input("Введите конец: "))
begin = dt.datetime(year, month, day1) #Формирование даты начала
end = dt.datetime(year, month, day2+1) #Формирование даты конца

#Функция получения данных из outlook
def get_calendar(begin, end):
    outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI')
    calendar = outlook.getDefaultFolder(9).Items
    calendar.IncludeRecurrences = True
    calendar.Sort('[Start]')
    restriction = "[Start] >= '" + begin.strftime('%m/%d/%Y') + "' AND [END] <= '" + end.strftime('%m/%d/%Y') + "'"
    calendar = calendar.Restrict(restriction)
    return calendar

cal = get_calendar(begin, end) #Применение функции с параметрами даты

#Цикл необходим, чтобы обрезать часовой пояс и преобразовать в текстовый формат
end_l=[] #Объявление списков
test_l=[]
subject_l=[]
body_l=[]
i=0
for c in cal:
    end_f = dt.datetime.strptime(str(cal[i].end).rsplit('+00:00')[0], '%Y-%m-%d %H:%M:%S')
    end_f = str(end_f)
    end_l.append(end_f)
    start_f = dt.datetime.strptime(str(cal[i].start).rsplit('+00:00')[0], '%Y-%m-%d %H:%M:%S')
    start_f = str(start_f)
    test_l.append(start_f)
    subject_f = str(cal[i].subject)
    subject_l.append(subject_f)
    body_f = str(cal[i].body)
    body_l.append(body_f)
    i += 1

cal_subject = [app.subject for app in cal] #Получение темы встречи из outlook
cal_body = [app.body for app in cal]  #Получение тела встречи из outlook

dict = {'Название работ': subject_l,'Начало': test_l,'Конец': end_l,'Тело': body_l} #Объявление словаря
words = ['#plan', '#work']
df = pd.DataFrame.from_dict(dict, orient='index')
df = df.transpose()
result = df
writer = pd.ExcelWriter('meeting.xlsx')
result.to_excel(writer, sheet_name='Тест', index=False)

for column in result:
    column_width = max(result[column].astype(str).map(len).max(), len(column))
    col_idx = result.columns.get_loc(column)
    writer.sheets['Тест'].set_column(col_idx, col_idx, column_width)

writer.save()

Он вытягивает данные из календаря outlook и переносит их в эксель, код сборная солянка из моих умений и вырезок из интернета.) Мне необходимо, чтобы в эксель попадали только те встречи календаря, которые содержат в себе слова '#plan' и '#work'. Перебровал уже много разных методов, по фильтрации списков, таблиц и словарей, ничего не сработало. Помогите, пожалуйста.


Ответы (1 шт):

Автор решения: D.Vinogradov

попробуйте str.contains

dict_of = {'Название работ': ['Просмотр заявок на ', 'TRW Справочники', 'TRW Справочники', 'FW: ЕжеДневное собрание отдела',
                              '#plan Инциденты тестовых сред', 'Просмотр заявок на ', '#work Работы по переводу NGFW'],
           'Начало': ['2022-03-22 10:00:00', '2022-03-22 10:30:00', '2022-03-22 12:00:00', '2022-03-22 15:45:00',
                      '2022-03-22 16:30:00', '2022-03-22 17:00:00', '2022-03-22 17:45:00'],
           'Конец': ['2022-03-22 10:30:00', '2022-03-22 11:00:00', '2022-03-22 12:30:00', '2022-03-22 16:00:00',
                     '2022-03-22 17:30:00', '2022-03-22 18:00:00', '2022-03-22 18:45:00'],
           'Тело': ['Просмотреть все заявки (инциденты в первую очередь', np.nan, 'some', np.nan, 'pros', 'hello',
                    'bye']}
df = pd.DataFrame.from_dict(dict_of, orient='index')
df = df.transpose()
result = df[df['Название работ'].str.contains('#work|#plan')]
>>> result

Название работ               Начало                Конец  Тело
4  #plan Инциденты тестовых сред  2022-03-22 16:30:00  2022-03-22 17:30:00  pros
6  #work Работы по переводу NGFW  2022-03-22 17:45:00  2022-03-22 18:45:00   bye
→ Ссылка