5分钟入门pandas
pandas是在数据处理、数据分析以及数据可视化上都有比较多的应用,这篇文章就来介绍一下pandas的入门。劳动节必须得劳动劳动
1. 基础用法
以下代码在jupyter
中运行,Python 版本3.6。首先导入 pandas
import pandas as pd
# 为了能在jupyter中展示图表
%matplotlib inline
# 从csv文件读取数据,也可从excel、json文件中读取
# 也可以通过sql从数据库读数据
data = pd.read_csv('order_list.csv')
# 输出几行几列
data.shape
output:
(1000, 3)
可以看到,变量 data 是一个二维表,有1000行,3列。pandas中这种数据类型被称作 DataFrame。
# 查看数据描述
data.describe()
data 中有3列,good_id、good_cnt 和 order_id 分别代表商品id、购买该商品数量和订单id。最左侧是describe
函数统计的指标,包括每一列的数量、均值、标准差、最大值、最小值等等。
# 预览数据,条数可设
data.head(3)
# 获取第2行数据
data.loc[2]
output:
good_id 100042
good_cnt 1
order_id 10000002
Name: 2, dtype: int64
# 获取多行数据,数组元素代表行号
data.loc[[1, 2]]
# 获取商品id=100012的所有记录
data[data['good_id']==100012]
# 获取商品id=100012且每笔订单销量=6的所有记录
data[(data['good_id']==100087) & (data['good_cnt']==6)]
# 获取订单号在[10000000, 10000042]中的记录
data[data['order_id'].isin([10000000, 10000042])]
# 画100012商品,每笔订单销量折线图
data[data['good_id']==100012]['good_cnt'].plot()
# 画100012商品,销量柱状图
data[data['good_id']==100012]['good_cnt'].hist()
# 更新数据,将第1行的good_cnt列改为10
data.loc[1, 'good_cnt'] = 10
data.head(3)
# 将100012商品每笔订单销量都改为20
data.loc[data['good_id']==100012, 'good_cnt'] = 20
data.head(3)
2. 中级用法
# 统计每种商品出现次数
# 即:每种商品的下单次数
data['good_id'].value_counts()
output:
100080 18
100010 16
100073 16
100097 15
100096 15
..
100079 5
100077 5
100007 4
100037 4
100033 4
Name: good_id, Length: 100, dtype: int64
# 取出商品销量列,该列中每个值都加1
data['good_cnt'].map(lambda x: x+1)
output:
0 21
1 11
2 2
3 4
4 10
..
995 8
996 9
997 6
998 5
999 9
Name: good_cnt, Length: 1000, dtype: int64
这里,map
并不改变原有的 data 中的数据,而是返回新的对象。
# 对数据集每列调用给定的函数
data.apply(len)
这里是对每列执行len
函数,当然apply
中的len
函数也可以换成自定义的 lambda 表达式。另外,如果想按行做处理,则在调用apply
函数时加上axis=1
参数即可。
# 对数据集中所有元素调用给定函数
# 同样不改变原有数据集
data.applymap(lambda x: x*100)
# 计算每列之间的相关系数
data.corr()
# 画出相关系数矩阵
pd.plotting.scatter_matrix(data, figsize=(12,8))
以左小角为例,它表示商品id(good_id)和订单id(order_id)之间的相关性。由于点比较分散,没有任何规律,因此可以说明这两列在数据值上没有相关性,这也好理解,因为本来它俩就是不同的概念。
相关系数矩阵一般用于机器学习中观察不同特征之间的相关性。
3. 高级用法
实现SQL join操作
# 构造DateFrame,代表订单发生的城市
order_city_df = pd.DataFrame(\
dict(order_id=[10000000, 10000001], \
city=['上海', '北京'])\
)
# 实现join
data.merge(order_city_df, on=['order_id'])
实现SQL group by操作
# 统计每个商品的总销量
data.groupby('good_id')['good_cnt'].sum().reset_index()
遍历 DataFrame 中每行数据
dictionary = {}
for i,row in data.iterrows():
dictionary[row['good_id']] = row['good_cnt']
pandas的入门就介绍到这里,希望能对你有帮助。对于想继续深入的朋友可以参考pandas官方文档,中英文都有。另外,我们使用pandas一般都是单机来处理,如果数据量比较大,单机运行起来会比较慢。这时候你可能会用到另外一个工具叫 Dask,它的接口兼容 pandas,可以与pandas相互转换,并且可以运行在集群上分布式处理数据。
如需完整代码,在公众号回复关键字 pd 即可
欢迎公众号「渡码」,输出别地儿看不到的干货。
5分钟入门pandas的更多相关文章
- (转)十分钟入门pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook . 习 ...
- python 10分钟入门pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- 快速入门Pandas
教你十分钟学会使用pandas. pandas是python数据分析的一个最重要的工具. 基本使用 # 一般以pd作为pandas的缩写 import pandas as pd # 读取文件 df = ...
- 快速入门 Pandas
先po几个比较好的Pandas入门网站十分钟入门:http://www.codingpy.com/article/a-quick-intro-to-pandas/手册前2章:http://pda.re ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Objective-C 30分钟入门教程
Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...
- Apache Shiro系列三,概述 —— 10分钟入门
一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...
随机推荐
- django->基本操作和新建项目常用配置
一.安装django pip install django==2.1.5 -U #安装django/升级最新版本 二.创建.启动django项目 django-admin startproject m ...
- openpyxl 模块 读写Excel
import openpyxl #写到execl中def write_execl(): book=openpyxl.Workbook() sheet=book.active #获取默认sheet # ...
- [一起面试AI]NO.9 如何判断函数凸或非凸
首先定义凸集,如果x,y属于某个集合M,并且所有的θx+(1-θ)f(y)也属于M,那么M为一个凸集.如果函数f的定义域是凸集,并且满足 f(θx+(1-θ)y)≤θf(x)+(1-θ)f(y) 则该 ...
- PHP 语法引用使用及实现
说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别. 什么是引用 在 PHP 中引用是一种数据类型 (结构),是指 指向同一个类型的数据结构 ...
- Linux c++ vim环境搭建系列(2)——Ubuntu18.04.4编译安装llvm clang
2. 源码编译安装llvm clang 参考网址: https://llvhttps
- 【python实现卷积神经网络】上采样层upSampling2D实现
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- 选择IT行业的自我心得,希望能帮助到各位!(二)
在前面说道的一,希望大家能喜欢,这也只是自己的一种经历,每个人都有年轻的时候,谁的年级都有自以为是,谁的年轻都有风华正茂,谁的年轻都让自己的内涵给我们自己摔了一个狠狠的道理,人外有人天外有天.我记得当 ...
- Jenkins 批量创建任务的三种方法
最近,要搭建多套测试环境,需要把 Jenkins 中 dev 视图下的所有任务批量复制到 sit 等视图下. 说明 Jenkins 任务名称规则为:[测试环境标识]-[工程名称],如:dev-daod ...
- Git敏捷开发--reset和clean
reset 丢弃本地所有修改,强行和上游分支保持一致 git reset --hard HEAD 若仅丢弃某个文件的改动,利用checkout git checkout your_file clean ...
- Dockerfile的简单人门编写之关于yum的问题
首先我们编写一个简单的Dockerfile的例子.不过再此之前大家得去把编写dockerfile的指令了解一下. 编写以 centos镜像为基础镜像,构建 http 服务,Dockerfile 要求删 ...