前言
最近工作工作中遇到一个需求,是要根据CDN日志过滤一些数据,例如流量、状态码统计,TOP IP、URL、UA、Referer等。以前都是用 bash shell 实现的,但是当日志量较大,日志文件数G、行数达数千万亿级时,通过 shell 处理有些力不从心,处理时间过长。于是研究了下Python pandas这个数据处理库的使用。一千万行日志,处理完成在40s左右。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
pandas 学习笔记
Pandas 中有两种基本的数据结构,Series 和 Dataframe。 Series 是一种类似于一维数组的对象,由一组数据和索引组成。 Dataframe 是一个表格型的数据结构,既有行索引也有列索引。
1 2 |
|
Series
1 2 3 4 5 6 7 |
|
Series的字符串表现形式为:索引在左边,值在右边。没有指定索引时,会自动创建一个0到N-1(N为数据的长度)的整数型索引。可以通过Series的values和index属性获取其数组表示形式和索引对象:
1 2 3 4 |
|
通常创建Series时会指定索引:
1 2 3 4 5 6 7 |
|
通过索引获取Series中的单个或一组值:
1 2 3 4 5 6 |
|
排序
1 2 3 4 5 6 7 8 9 10 11 12 |
|
筛选运算
1 2 3 4 5 6 7 8 9 10 11 |
|
成员
1 2 3 4 |
|
通过字典创建Series
1 2 3 4 5 6 7 8 |
|
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)
1 2 3 4 5 6 7 8 |
|
当指定index时,sdata中跟states索引相匹配的3个值会被找出并放到响应的位置上,但由于‘Suzhou'所对应的sdata值找不到,所以其结果为NaN(not a number),pandas中用于表示缺失或NA值
pandas的isnull和notnull函数可以用于检测缺失数据:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Series也有类似的实例方法
1 2 3 4 5 6 |
|
Series的一个重要功能是,在数据运算中,自动对齐不同索引的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Series的索引可以通过复制的方式就地修改
1 2 3 4 5 6 7 |
|
DataFrame
pandas读取文件
1 2 3 4 5 6 7 8 |
|
DataFrame列选取
1 |
|
1 2 3 4 5 6 7 |
|
DataFrame行选取
1 2 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
获取一个元素,可以通过iloc,更快的方式是iat
1 2 3 4 |
|
DataFrame块选取
1 2 3 4 5 |
|
根据条件过滤行
在方括号中加入判断条件来过滤行,条件必需返回 True 或者 False
1 2 3 4 5 6 7 8 9 10 11 |
|
增加列
1 2 3 4 5 6 7 8 |
|
排序
按指定列排序
1 2 3 4 5 6 7 |
|
1 2 |
|
1 2 3 4 5 6 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
转置
1 2 3 4 5 6 |
|
使用isin
1 2 3 4 5 6 |
|
运算操作:
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
group
group 指的如下几步:
- Splitting the data into groups based on some criteria
- Applying a function to each group independently
- Combining the results into a data structure
See the Grouping section
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
group一下,然后应用sum函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
总结
以上就是关于利用Python中的pandas库进行cdn日志分析的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://qingkang.me/python-pandas.html
本文链接:https://my.lmcjl.com/post/14862.html
4 评论