我刚开始使用Jupyter笔记本和Python。在课程中,我有一项艰巨的任务:
我想了解data_log.log中最常见的10个小时
数据看起来像这样,日期戳在方括号[]中。
64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/ouble_bounce_sender?topicparent=Main.ConfigurationVariable HTTP/1.1" 401 12846
64.242.88.10 - - [07/Mar/2004:19:03:58 -0800] "GET /twiki/bin/edit/Main/Message_size_limit?topicparent=Main.ConfigurationVariable HTTP/1.1" 401 12846
206-15-133-154.dialup.ziplink.net - - [11/Mar/2004:16:33:23 -0800] "HEAD /twiki/bin/view/Main/SpamAssassinDeleting HTTP/1.1" 200 0
我从开始:
import pandas as pd
dataset= pd.read_fwf('data_log.log')
如何访问方括号中:之后的前两个数字?
那之后我应该如何计算它们?我将带有小时的表格打印出前十名并计为表格标题
小时数
10 5
14 3
10 2
答案 0 :(得分:0)
最好使用正则表达式解决。请参见Python Documentation以获取适合您数据的语法。这将使您的程序可以从模式中提取数据的一部分。
答案 1 :(得分:0)
模拟文本文件:
file_data = """
64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET
/twiki/bin/edit/Main/ouble_bounce_sender?topicparent=Main.ConfigurationVariable
HTTP/1.1" 401 12846
64.242.88.10 - - [07/Mar/2004:19:03:58 -0800] "GET
/twiki/bin/edit/Main/Message_size_limit?topicparent=Main.ConfigurationVariable
HTTP/1.1" 401 12846
206-15-133-154.dialup.ziplink.net - - [11/Mar/2004:16:33:23 -0800] "HEAD
/twiki/bin/view/Main/SpamAssassinDeleting HTTP/1.1" 200 0"""
使用pandas.read_csv
导入文件:
import pandas as pd
df = pd.read_csv(pd.compat.StringIO(file_data), names=[0, 'hour', 2, 3], sep=':', engine='python')
这提供了一个混乱的DataFrame,但您只关心小时列:
0 hour 2 \
0 64.242.88.10 - - [07/Mar/2004 16 5
1 64.242.88.10 - - [07/Mar/2004 19 3
2 206-15-133-154.dialup.ziplink.net - - [11/Mar/... 16 33
3
0 49 -0800] "GET /twiki/bin/edit/Main/ouble_boun...
1 58 -0800] "GET /twiki/bin/edit/Main/Message_si...
2 23 -0800] "HEAD /twiki/bin/view/Main/SpamAssas...
获取小时数:
df['hour'].value_counts()
Out[141]:
16 2
19 1