Фильтрация таблицы включающая в себя словари
Есть вот такой код:
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