什么是Pandas
在python中,Pandas是数据处理必不可少的工具,不管是数据分析还是深度学习,都离不开pandas。它底层用c实现,所以数据处理速度非常快,而且库提供了很多便捷的数据处理api,处理数据非常实用。
Pandas使用
Pandas 有两种数据结构: Series和DataFrame
import pandas as pd
from pandas import Series, DataFrame
pandas的奇技淫巧
删除异常数据&补全缺失数据
这里书写代码...pandas的相关库
Numpy
Numpy主要是矩阵计算,在机器学习中经常会被用到,等到讲解机器学习的教程时我们再来做详解。
Matplotlib
绘图库。
pandas实践之卡bin数据分析
卡bin是支付中从卡号识别出信息的重要字典,其数据量动辄几十万,若使用硬编码分析,需要非常久的时间,而使用pandas非常快,只要短短几秒就能得出结果。
以下为一条数据
457186;VISA/DANKORT;NETS;DEBIT;CLASSIC;DENMARK;DK;DNK;208;HTTP://WWW.TELLER.COM /;915 08 989;16;PERSONAL;N
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 字段说明 | 卡bin | 卡组织 | 银行名 | 借记/贷记 | 卡级别 | 国家名 | 国家 | 国家 | 币种 |
| 筛选规则 | "若国家为AE,银行名为空则舍弃; | ||||||||
| 若国家不为AE,银行名为空也保留" | 该字段若为空,则使用默认值16 | ||||||||
| 补充说明 | 6-10位 | DEBIT/CREDIT | CLASSIC | 两位国家编码 | 三位国家编码 | 三位数字的币种 | |||
从原数据中输出5000条待分析数据
file_path = "/opt/file/dataset/bins_all.csv"
# 读取csv数据,原文件单行分隔符为;,指定列索引名,指定所有数据均为string类型
df = pd.read_csv(file_path, sep=';', header=None, index_col=False, names=['card_bin','card_brand','bank_name','drcr','class','country_name','cc','cc3','currency','website','phone_no','card_len','person','unknown'], dtype=str)
df.head()
# 随机选出5000条输出到目标csv中
df.sample(5000).to_csv("/opt/file/dataset/bins_analysis.csv")数据分析
# 删除重复的数据,在当前数据集中card_bin+card_len应该是唯一索引
df.drop_duplicates(['card_bin','card_len'],keep='last')
# 若cc为AE则bank_name不能为空(删除cc为AE且bank_name为空的数据)
pandas在java中的实践
pandas基本是数据分析的事实标准,java中也不乏模仿者,其中比较出名的是joinery和tablesaw,joinery主要实现的是DataFrame,而tablesaw侧重于图表显示,需要注意这两个框架的知名度和成熟度都远逊于pandas。在此对joinery的使用做简要叙述,并简单测试了对110m的文件读写性能与pandas对比。
joinery使用说明
joinery和pandas读取文件对比
| 场景耗时(s) | Joinery | Pandas |
|---|---|---|
| 删除无效和重复数据() | 411 | 174 |
| 100次全量读取并describe | 603 | 270 |
| 50次读取并value_count 1/3/11/12/13列 | 411 | 174 |
| 筛选3列为AE并describe | 表格 | 表格 |
比对结果:joinery相比pandas的describe,缺少了25%,50%,75%三项数据,但是速度要慢一倍以上
参考资料
《深入浅出Pandas:利用Python进行数据处理与分析》
《利用python进行数据分析》
Pandas教程