将txt文件和日志文件导入Jupyter Notebook

时间:2018-08-10 22:01:01

标签: python pandas jupyter-notebook

我刚开始使用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

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