Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series
文章目录
- 1、什么是表格?
- 2、DataFrame类型
- 3、Series类型
- 本系列教程教程完整目录:
1、什么是表格?
月份 | 姓名 | 性别 | 应发工资 | 实发工资 | 职位 | |
---|---|---|---|---|---|---|
0 | 1 | 张三 | 男 | 2000 | 1500 | 主犯 |
1 | 2 | 张三 | 男 | 2000 | 1000 | 主犯 |
2 | 3 | 张三 | 女 | 2000 | 15000 | 主犯 |
3 | 4 | 张三 | 女 | 2000 | 1500 | 主犯 |
4 | 5 | 张三 | 女 | 2000 | 1500 | 主犯 |
5 | 2 | 李四 | 男 | 1800 | 1300 | 从犯 |
6 | 3 | 李四 | 男 | 1800 | 1300 | 从犯 |
7 | 4 | 李四 | 男 | 1800 | 1300 | 从犯 |
8 | 5 | 李四 | 男 | 1800 | 1300 | 从犯 |
9 | 1 | 王五 | 女 | 1800 | 1300 | 龙套 |
10 | 2 | 王五 | 女 | 1800 | 1300 | 龙套 |
11 | 3 | 王五 | 女 | 1800 | 1300 | 龙套 |
12 | 4 | 王五 | 女 | 1800 | 1300 | 龙套 |
以上表为例,按照一般的理解,表格一般包含以下属性:
表头:即上表中的 ”月份,姓名,性别,应发工资,实发工资,职位“。
注意,这里第一列的空白处照常而言也是一个表头,不过在Pandas中它有另外的含义。
数据主体:从第二行第一列开始,到右下角的”龙套“,这一块区域全部是表格的数据主体。
- 表格行与列:行与列是包含在数据主体中的部分。
索引列:这是Pandas专门设计的一个部分,设置它一方面为了定位方便,另一方面它也有利于复杂表格的操作,今后会讲到。
2、DataFrame类型
现在我们先用Pandas录入上述表格数据:
import pandas as pd
df = pd.DataFrame({'月份': [1,2,3,4,5,2,3,4,5,1,2,3,4],'姓名':['张三','张三','张三','张三','张三','李四','李四','李四','李四','王五','王五','王五','王五'],'性别':['男','男','女','女','女','男','男','男','男','女','女','女','女'],'应发工资':[2000,2000,2000,2000,2000,1800,1800,1800,1800,1800,1800,1800,1800],'实发工资':[1500,1000,15000,1500,1500,1300,1300,1300,1300,1300,1300,1300,1300],'职位':['主犯','主犯','主犯','主犯','主犯','从犯','从犯','从犯','从犯','龙套','龙套','龙套','龙套']
})
结果:
df月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
5 2 李四 男 1800 1300 从犯
6 3 李四 男 1800 1300 从犯
7 4 李四 男 1800 1300 从犯
8 5 李四 男 1800 1300 从犯
9 1 王五 女 1800 1300 龙套
10 2 王五 女 1800 1300 龙套
11 3 王五 女 1800 1300 龙套
12 4 王五 女 1800 1300 龙套
上述代码的内容很容易理解,首先是将pandas
库导入并将设别名为pd
,其次再是调用DataFrame
的构造函数实例化该对象,并赋值给df
。这里表格的信息我们是采用dict
的格式录入的。
另外观察到另一个问题,在录入数据时并没有提供第一列0,...,12
这些数据,但df
变量就自动有了上述内容。这一列就是表格的索引列。
那么此时再来对照表格认识一下DataFrame
的各个基本属性。
# 表头
df.columnsIndex(['月份', '姓名', '性别', '应发工资', '实发工资', '职位'], dtype='object')
# 索引
df.indexRangeIndex(start=0, stop=13, step=1)
# 数据主体
df.valuesarray([[1, '张三', '男', 2000, 1500, '主犯'],[2, '张三', '男', 2000, 1000, '主犯'],[3, '张三', '女', 2000, 15000, '主犯'],[4, '张三', '女', 2000, 1500, '主犯'],[5, '张三', '女', 2000, 1500, '主犯'],[2, '李四', '男', 1800, 1300, '从犯'],[3, '李四', '男', 1800, 1300, '从犯'],[4, '李四', '男', 1800, 1300, '从犯'],[5, '李四', '男', 1800, 1300, '从犯'],[1, '王五', '女', 1800, 1300, '龙套'],[2, '王五', '女', 1800, 1300, '龙套'],[3, '王五', '女', 1800, 1300, '龙套'],[4, '王五', '女', 1800, 1300, '龙套']], dtype=object)
这里可以看到,表头是Index
类型(Pandas类型),索引列是RangeIndex
类型,values
则是普通的array
类型。前面两个类型在用到的时候我们再介绍,如果好奇的话可以先点击链接自行查看。
接下来再简单查看一下df
中的变量类型:
df.dtypes月份 int64
姓名 object
性别 object
应发工资 int64
实发工资 int64
职位 object
dtype: object
这里除了各列的类型以外,还包括一个它自己的类型object
。
3、Series类型
先看一个例子:
ss=df['姓名']type(ss)
pandas.core.series.Seriesss0 张三
1 张三
2 张三
3 张三
4 张三
5 李四
6 李四
7 李四
8 李四
9 王五
10 王五
11 王五
12 王五
Name: 姓名, dtype: object
结合DataFrame
的构造函数的用法其实可以做出合理推测 – 它的索引方式应该和dict
类似。上述代码即证实了这一点,但仔细观察第3-4行,可以看到取出姓名
这一列之后的对象变成了Series
。它是Pandas中另外一个重要的数据结构。
Series
对象的结构实际上与DataFrame
基本一致,唯一不同的在于Series
的数据主体只有一维,而DataFrame
的数据可以有多维。 一种简单的理解方式是:Series
是一个表的一列,同时它带有Index
类型的属性。作为表的一列,它自然也有’表头’,不过此时它不再叫column而是叫name
.
ss.name
'姓名'
自然地,Series
通常也可以直接转换为DataFrame
,如:
ds = pd.DataFrame(ss)type(ds)
pandas.core.frame.DataFrame
或者直接调用方法:
type(ss.to_frame())
pandas.core.frame.DataFrame
然而,这里需要注意的是,由多个Series
转回DataFrame
时则稍嫌麻烦。可能有同学容易想到以下的方式:
ss1 = df['月份']ss2 = df['姓名']pd.DataFrame([ss1,ss2])0 1 2 3 4 5 6 7 8 9 10 11 12
月份 1 2 3 4 5 2 3 4 5 1 2 3 4
姓名 张三 张三 张三 张三 张三 李四 李四 李四 李四 王五 王五 王五 王五
注意,此时表格没有变成原来的形状,而对应的信息属性其实也发生了变化。”月份“,”姓名“都变成了索引Index
,而上面的数字此时其实仍然是属性。关于这个问题后面讲操作的时候再讨论,这里先直接给出正确的做法:
dd = pd.DataFrame({ ss1.name: ss1.values,ss2.name: ss2.values}
)dd月份 姓名
0 1 张三
1 2 张三
2 3 张三
3 4 张三
4 5 张三
5 2 李四
6 3 李四
7 4 李四
8 5 李四
9 1 王五
10 2 王五
11 3 王五
12 4 王五
这种做法是最为操守的,其思路是利用Series
中对应的信息先构造一个dict
,再利用dict
生成DataFrame
。当然还可以这样做:
dd2 = pd.DataFrame()dd2[ss1.name] = ss1.valuesdd2[ss2.name] = ss2.valuesdd2月份 姓名
0 1 张三
1 2 张三
2 3 张三
3 4 张三
4 5 张三
5 2 李四
6 3 李四
7 4 李四
8 5 李四
9 1 王五
10 2 王五
11 3 王五
12 4 王五
如果熟悉Python的基本数据结构及其操作的情况下,也可以灵活地处理更为复杂的情况,这里不再赘述。
当然还有更多灵活的操作,可以参考相关资料,如:
pandas中Series,DataFrame的连接(拼接)
更多神奇的操作还可以在官方文档中看到:Merge, join, and concatenate
本系列教程教程完整目录:
一、Pandas简介与安装
二、Pandas基本数据结构-DataFrame与Series
三、Pandas文件读写
四、Pandas数据索引方式
五、Pandas简单统计操作及通用方式
六、Pandas条件查询
七、Pandas缺失数据的处理(数据清洗基础)
八、Pandas数据透视表
九、表的合并、连接、拼接(数据聚合基础)
Pandas简明教程:二、Pandas基本数据结构-DataFrame与Series相关推荐
- Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)
真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...
- Pandas简明教程:八、Pandas数据透视表
透视表(pivot)是由微软发明的一个概念,1993年微软注册了PivotTable这一商标,而他们又在2020年正式撤销了注册. 关于透视表的话题随便搜搜就是一大堆,而有些地方可能都吹得很神了.透视 ...
- Pandas简明教程-适用于竞赛、研究以及办公自动化
数据的读.写.查.改是数据分析的基础,也是竞赛.研究以及办公自动化类项目的常用操作.为了让大家能以更简单的方法来操作数据,我们选择Pandas作为处理数据的工具,希望通过这个系列的教程能够帮助大家节省 ...
- Pandas简明教程:五、Pandas简单统计操作及通用方式
文章目录 1.DataFrame的方法使用举例 2.DataFrame的方法调用通用方式 3.DataFrame直接调用其它方法 本系列教程教程完整目录: 前面已经提到,Pandas的DataFram ...
- Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)
文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...
- Pandas简明教程:六、Pandas条件查询
文章目录 1.基本方法 2.高级查询 3. 可用于修改内容的`where`方法 4.条件检索进阶:快速的查询方法`query` 5.其它检索方法简述 本系列教程教程完整目录: 目前大家公认的一个说法是 ...
- Pandas简明教程:三、Pandas文件读写
文章目录 1.CSV文件 2.Excel的读写 3.HTML文件的读写 4.其它文件(数据)类型的简单说明 5.办公自动化问题简析 本系列教程教程完整目录: Pandas支持了非常丰富的文件类型(见文 ...
- Pandas简明教程:四、Pandas数据索引方式
文章目录 1.以类似`dict`的方式访问 2.以属性方式访问数据 3.访问行(slicing) 4.用`loc`方法访问不同行列 5.用`iloc`方法直接访问行列 6.其它方式 本系列教程教程完整 ...
- Pandas简明教程:一、Pandas简介与安装
文章目录 1.Pandas简介 2.为何要用Pandas? 3.知识.技能与环境的准备 4.Pandas的安装与相关辅助资料 本系列教程教程完整目录: 1.Pandas简介 关于Pandas的介绍在百 ...
最新文章
- [CQOI2010]扑克牌
- 理解JavaScript的原始类型
- layui 导航收缩代码_pycharm的十个小技巧,让你写代码效率翻倍
- mac 查看端口_如何重置mac上的系统管理控制器smc教程
- PHP error_reporting() 错误控制函数功能详解
- go struct 零值_《Go 语言程序设计》读书笔记 (五) 协程与通道
- Vivado安装教程详细版
- ubuntu18.04 安装 腾讯qq
- 3t studio 导出数据_Studio 3T下操作MongoDB的基本命令(转载)
- python数据分析水果_用python解决简单的水果分类问题
- 解决ValueError: Cannot run multiple SparkContexts at once; existing SparkContext
- GNN学习笔记(三) Graph Neural Network概述
- [经验] 系统封装常见问题大总结(非官方)
- 流程驱动管理vs 数据驱动管理
- ubuntu18.10安装网易云音乐,并解决网易云音乐图标无法启动的问题
- 听说一个漂亮的小姐姐图片是程序员无法抗拒的
- 【知识分享】C语言中的设计模式——命令模式
- POI-word模板替换
- FlyMcu下载出现“从08000000开始运行失败...可能是因为刚写了选项字节!!!”解决方法!
- WordPress插件 | 在WordPress中使用FontAwesome
热门文章
- 手机4k读写速度测试软件,4K扇区速度测试及读写IOPS_Intel 520_固态硬盘评测-中关村在线...
- Linux脚本点空格,linux – 在bash脚本中使用引号和空格的awk
- taglib遍历foreach循环list集合
- spring boot创建多模块聚合工程
- 十进制、十六进制、二进制习题
- ubuntu11.10设置了pppoe(自动拨号后),开机速度慢和无法连接无线网都解决办法...
- 第六章 BitArray类
- Android平台 Psensor传感器调试方法
- 如何导出wince6.0的SDK
- jenkins部署java项目(五)