とりあえずゴリ押しのPythonコード。
美しさはない。
import pandas as pd
from urllib.parse import unquote
# ファイルの場所
url = '/tmp/access.log'
# column定義
fields = ['host', 'identity', 'user', 'time_part1', 'time_part2', 'cmd_path_proto',
'http_code', 'response_bytes', 'referer', 'user_agent', 'unknown']
# データ読み込み
data = pd.read_csv(url, sep=' ', header=None, names=fields, na_values=['-'])
# 時刻列parse
time = data.time_part1 + data.time_part2
time_trimmed = time.map(lambda s: s.strip('[]').split('+')[0])
data['time'] = pd.to_datetime(time_trimmed, format='%d/%b/%Y:%H:%M:%S')
# コマンド列parse
data['command'], data['path'], data['protocol'] = zip(*data['cmd_path_proto'].str.split().tolist())
data['path'] = data['path'].map(lambda s: unquote(s))
# 不要列削除
data1 = data.drop(['time_part1', 'time_part2', 'cmd_path_proto'], axis=1)
# 空データ削除
data2 = data1.dropna(axis=1, how='all')