Анализ логов IIS с использованием pandas

Задача сама по себе не сложная и решается силами чистого питона плюс-минус понятно, но пытаюсь прикрутить к ее решению pandas. Раньше для подобных задач все конвертил в эксель, но в данном случае (около 6 млн строк) эксель дает дуба :) Есть логи IIS и я хочу получить из них информацию о количестве запросов к серверу, например в интервалы по 10 минут (т.е. это разбиение на временные интервалы)

из логов получил датафрейм (взял маленький кусок для примера):

 df = get_dataframe(get_log_list())
 
date        time            cs-username  timestamp  0
2022-05-17  01:36:55                   - 2022-05-17 01:36:55 1    
2022-05-17  01:36:59        test1        2022-05-17 01:36:59 2    
2022-05-17  01:37:09                   - 2022-05-17 01:37:09 3    
2022-05-17  01:37:10        test1        2022-05-17 01:37:10 4    
2022-05-17  04:51:55                   - 2022-05-17 04:51:55 ...      
  1. Никак не могу разобраться, как получить количество запросов к серверу поинтервально (с шагом в 10 минут, например): то есть получить результат, для приведенного примера, вида:
    2022-05-17 01:20:00 - 0  
    2022-05-17 01:30:00 - 25  
    2022-05-17 01:40:00 - 100  
    2022-05-17 01:50:00 - 300  
    etc
  1. Как в целом применять условие "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому". например учитывать при подсчете только запросы без авторизации, т.е. с пустым юзернеймом или наоборот?

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

Автор решения: SergFSM

попробуйте как-то так:

# устанавливаем timestamp как индекс и преобразуем в тип datetime
df = pd.read_excel('1.xls',index_col='timestamp',parse_dates=True)

df = df.resample('10min').size()
>>> df.head()
'''
timestamp
2022-05-18 05:00:00     4
2022-05-18 05:10:00     0
2022-05-18 05:20:00    28
2022-05-18 05:30:00    56
2022-05-18 05:40:00    16
Freq: 10T, dtype: int64

а на счет "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому", вы можете использовать фильтрацию строк, например: df[df['cs-username']=='test1']

→ Ссылка