pandas是在数据处理、数据分析以及数据可视化上都有比较多的应用,这篇文章就来介绍一下pandas的入门。劳动节必须得劳动劳动

1. 基础用法

以下代码在jupyter中运行,Python 版本3.6。首先导入 pandas

  1. import pandas as pd
  2. # 为了能在jupyter中展示图表
  3. %matplotlib inline
  1. # 从csv文件读取数据,也可从excel、json文件中读取
  2. # 也可以通过sql从数据库读数据
  3. data = pd.read_csv('order_list.csv')
  1. # 输出几行几列
  2. data.shape
  3. output:
  4. (1000, 3)

可以看到,变量 data 是一个二维表,有1000行,3列。pandas中这种数据类型被称作 DataFrame。

  1. # 查看数据描述
  2. data.describe()


data 中有3列,good_id、good_cnt 和 order_id 分别代表商品id、购买该商品数量和订单id。最左侧是describe函数统计的指标,包括每一列的数量、均值、标准差、最大值、最小值等等。

  1. # 预览数据,条数可设
  2. data.head(3)
  1. # 获取第2行数据
  2. data.loc[2]
  3. output:
  4. good_id 100042
  5. good_cnt 1
  6. order_id 10000002
  7. Name: 2, dtype: int64
  1. # 获取多行数据,数组元素代表行号
  2. data.loc[[1, 2]]
  1. # 获取商品id=100012的所有记录
  2. data[data['good_id']==100012]
  1. # 获取商品id=100012且每笔订单销量=6的所有记录
  2. data[(data['good_id']==100087) & (data['good_cnt']==6)]
  1. # 获取订单号在[10000000, 10000042]中的记录
  2. data[data['order_id'].isin([10000000, 10000042])]
  1. # 画100012商品,每笔订单销量折线图
  2. data[data['good_id']==100012]['good_cnt'].plot()
  1. # 画100012商品,销量柱状图
  2. data[data['good_id']==100012]['good_cnt'].hist()
  1. # 更新数据,将第1行的good_cnt列改为10
  2. data.loc[1, 'good_cnt'] = 10
  3. data.head(3)
  1. # 将100012商品每笔订单销量都改为20
  2. data.loc[data['good_id']==100012, 'good_cnt'] = 20
  3. data.head(3)

2. 中级用法

  1. # 统计每种商品出现次数
  2. # 即:每种商品的下单次数
  3. data['good_id'].value_counts()
  4. output:
  5. 100080 18
  6. 100010 16
  7. 100073 16
  8. 100097 15
  9. 100096 15
  10. ..
  11. 100079 5
  12. 100077 5
  13. 100007 4
  14. 100037 4
  15. 100033 4
  16. Name: good_id, Length: 100, dtype: int64
  1. # 取出商品销量列,该列中每个值都加1
  2. data['good_cnt'].map(lambda x: x+1)
  3. output:
  4. 0 21
  5. 1 11
  6. 2 2
  7. 3 4
  8. 4 10
  9. ..
  10. 995 8
  11. 996 9
  12. 997 6
  13. 998 5
  14. 999 9
  15. Name: good_cnt, Length: 1000, dtype: int64

这里,map并不改变原有的 data 中的数据,而是返回新的对象。

  1. # 对数据集每列调用给定的函数
  2. data.apply(len)

这里是对每列执行len函数,当然apply中的len函数也可以换成自定义的 lambda 表达式。另外,如果想按行做处理,则在调用apply函数时加上axis=1参数即可。

  1. # 对数据集中所有元素调用给定函数
  2. # 同样不改变原有数据集
  3. data.applymap(lambda x: x*100)
  1. # 计算每列之间的相关系数
  2. data.corr()
  1. # 画出相关系数矩阵
  2. pd.plotting.scatter_matrix(data, figsize=(12,8))


以左小角为例,它表示商品id(good_id)和订单id(order_id)之间的相关性。由于点比较分散,没有任何规律,因此可以说明这两列在数据值上没有相关性,这也好理解,因为本来它俩就是不同的概念。

相关系数矩阵一般用于机器学习中观察不同特征之间的相关性。

3. 高级用法

实现SQL join操作


  1. # 构造DateFrame,代表订单发生的城市
  2. order_city_df = pd.DataFrame(\
  3. dict(order_id=[10000000, 10000001], \
  4. city=['上海', '北京'])\
  5. )
  6. # 实现join
  7. data.merge(order_city_df, on=['order_id'])

实现SQL group by操作

  1. # 统计每个商品的总销量
  2. data.groupby('good_id')['good_cnt'].sum().reset_index()

遍历 DataFrame 中每行数据

  1. dictionary = {}
  2. for i,row in data.iterrows():
  3. dictionary[row['good_id']] = row['good_cnt']

pandas的入门就介绍到这里,希望能对你有帮助。对于想继续深入的朋友可以参考pandas官方文档,中英文都有。另外,我们使用pandas一般都是单机来处理,如果数据量比较大,单机运行起来会比较慢。这时候你可能会用到另外一个工具叫 Dask,它的接口兼容 pandas,可以与pandas相互转换,并且可以运行在集群上分布式处理数据。

如需完整代码,在公众号回复关键字 pd 即可

欢迎公众号「渡码」,输出别地儿看不到的干货。

5分钟入门pandas的更多相关文章

  1. (转)十分钟入门pandas

    本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook . 习 ...

  2. python 10分钟入门pandas

    本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...

  3. 快速入门Pandas

    教你十分钟学会使用pandas. pandas是python数据分析的一个最重要的工具. 基本使用 # 一般以pd作为pandas的缩写 import pandas as pd # 读取文件 df = ...

  4. 快速入门 Pandas

    先po几个比较好的Pandas入门网站十分钟入门:http://www.codingpy.com/article/a-quick-intro-to-pandas/手册前2章:http://pda.re ...

  5. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  6. Objective-C 30分钟入门教程

    Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...

  7. Apache Shiro系列三,概述 —— 10分钟入门

     一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...

  8. JavaScript 10分钟入门

    JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...

  9. 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))

    十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...

随机推荐

  1. Django模拟ASP.NET MVC 自动匹配路由(转载)

    项目结构 操作步骤 1.创建项目结构如上图 2.在myapp目录下创建urls文件,代码: from django.conf.urls import patterns, url from untitl ...

  2. 几行代码实现cookie的盗取

    前言 上一篇文章中介绍了XSS(跨站脚本攻击)简单原理与几种类型.接下来通过实例用几行代码实现cookie的盗取. 正文 这里测试用的工具是DVWA(可以本地搭建,前面文章有介绍),和phpstudy ...

  3. Java队列学习第一篇之列介绍

    Java并发之显式锁和隐式锁的区别 在面试的过程中有可能会问到:在Java并发编程中,锁有两种实现:使用隐式锁和使用显示锁分别是什么?两者的区别是什么?所谓的显式锁和隐式锁的区别也就是说说Synchr ...

  4. bat中的特殊字符,以及需要在bat中当做字符如何处理

    bat中的特殊字符,以及需要在bat中当做字符如何处理 (2014-02-27 21:16:55) 转载▼ 标签: bat 特殊字符 分类: develop bat中的特殊字符,以及需要在bat中当做 ...

  5. java web之Filter详解

    java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,W ...

  6. ES5和ES6基本介绍与面向对象的基本思想

    ES6和ES5基本介绍 let  const  关键词定义变量 let 定义变量 特点: let 定义的变量,不会进行预解析  let 定义的变量,与 forEach() 中的变量类似  每次执行都会 ...

  7. Go gRPC进阶-go-grpc-middleware使用(八)

    前言 上篇介绍了gRPC中TLS认证和自定义方法认证,最后还简单介绍了gRPC拦截器的使用.gRPC自身只能设置一个拦截器,所有逻辑都写一起会比较乱.本篇简单介绍go-grpc-middleware的 ...

  8. Oracle数据库提权

    一.执行java代码 简介 oracle提权漏洞集中存在于PL/SQL编写的函数.存储过程.包.触发器中.oracle存在提权漏洞的一个重要原因是PL/SQL定义的两种调用权限导致(定义者权限和调用者 ...

  9. pytorch GPU训练好的模型使用CPU加载

    torch.load('tensors.pt') # 把所有的张量加载到CPU中 torch.load('tensors.pt', map_location=lambda storage, loc: ...

  10. 2层感知机(神经网络)实现非线性回归(非线性拟合)【pytorch】

    import torch import numpy import random from torch.autograd import Variable import torch.nn.function ...