Разделить столбец данных на два на основе первого вхождения элемента в значение столбца - PullRequest
1 голос
/ 01 марта 2020

У меня есть следующий фрейм данных с 4 столбцами:

    IP  Time    URL Staus
0   10.128.2.1  [29/Nov/2017:06:58:55   GET /login.php HTTP/1.1 200
1   10.128.2.1  [29/Nov/2017:06:59:02   POST /process.php HTTP/1.1  302
2   10.128.2.1  [29/Nov/2017:06:59:03   GET /home.php HTTP/1.1  200
3   10.131.2.1  [29/Nov/2017:06:59:04   GET /js/vendor/moment.min.js HTTP/1.1   200
4   10.130.2.1  [29/Nov/2017:06:59:06   GET /bootstrap-3.3.7/js/bootstrap.js HTTP/1.1   200
5   10.130.2.1  [29/Nov/2017:06:59:19   GET /profile.php?user=bala HTTP/1.1 200

Мне нужно разделить столбец Time на два новых столбца с названиями «date» и «time». Мне нужно разделить текущее значение в столбце Time по первому появлению ':'.

Я пробовал функцию разделения для первого экземпляра ':' следующим образом:

df['date','time']=df.Time.str.split(":", 1)

Но вот что я получаю:

    IP  Time    URL Staus   (date, time)
0   10.128.2.1  [29/Nov/2017:06:58:55   GET /login.php HTTP/1.1 200 [[29/Nov/2017, 06:58:55]
1   10.128.2.1  [29/Nov/2017:06:59:02   POST /process.php HTTP/1.1  302 [[29/Nov/2017, 06:59:02]
2   10.128.2.1  [29/Nov/2017:06:59:03   GET /home.php HTTP/1.1  200 [[29/Nov/2017, 06:59:03]
3   10.131.2.1  [29/Nov/2017:06:59:04   GET /js/vendor/moment.min.js HTTP/1.1   200 [[29/Nov/2017, 06:59:04]

Как правильно разделить на две колонки? Что я делаю неправильно? Справка: (

1 Ответ

1 голос
/ 01 марта 2020

Добавьте параметр expand=True для DataFrame, а затем добавьте [] для новых столбцов:

df[['date','time']] = df.Time.str.split(":", 1, expand=True)
print (df)
           IP                   Time                        URL  Staus  \
0  10.128.2.1  [29/Nov/2017:06:58:55     GET/login.php HTTP/1.1    200   
1  10.128.2.1  [29/Nov/2017:06:59:02  POST/process.php HTTP/1.1    302   

           date      time  
0  [29/Nov/2017  06:58:55  
1  [29/Nov/2017  06:59:02  

Или также добавьте Series.str.strip для удаления трейлинга []:

df[['date','time']] = df.Time.str.strip('[]').str.split(":", 1, expand=True)
print (df)
           IP                   Time                        URL  Staus  \
0  10.128.2.1  [29/Nov/2017:06:58:55     GET/login.php HTTP/1.1    200   
1  10.128.2.1  [29/Nov/2017:06:59:02  POST/process.php HTTP/1.1    302   

          date      time  
0  29/Nov/2017  06:58:55  
1  29/Nov/2017  06:59:02  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...