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 即可

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

最新文章

  1. 缓冲区溢出利用——捕获eip的傻瓜式指南
  2. iOS 微信支付总结
  3. 我是一只IT小小鸟----读书笔记
  4. AHCI驱动安装
  5. golang函数调用计时
  6. IOS 提交审核,遇到Missing Push Notification Entitlement 问题。
  7. 数据库(.udl)简单测试连接
  8. CSS display 属性详解
  9. 一步一步重写 CodeIgniter 框架 (3) —— 用面向对象重构代码
  10. linux 安装MySql 5.7.21 操作步骤
  11. javascript之this
  12. El表达式的判断字符串的长度和截取,日期时间的格式化
  13. 如何用TortoiseSVN对文件进行操作
  14. JMeter—配置元件(七)
  15. [C++]Linux之图形界面编程库[curses库]之入门教程
  16. PDF软件推荐——Sumatra PDF - imsoft.cnblogs
  17. ElasticStack系列之十二 & 搜索结果研究
  18. Linux驱动之内存访问
  19. [CF1105D]Kilani and the Game
  20. 2-2-sshd服务安装管理及配置文件理解和安全调优

热门文章

  1. Vue项目添加动态浏览器头部title
  2. CH5E07 划分大理石(背包dp+二进制拆分)
  3. PHP单例模式及应用场
  4. 手把手教Extjs-简单GridField示例讲解二
  5. Laravel 分页 数据丢失问题解决
  6. jmeter json path espressions学习
  7. [YII2] 自带分页调整
  8. pytorch中tensor的属性 类型转换 形状变换 转置 最大值
  9. pytorch中tensor张量的创建
  10. shell脚本之awk(一)