文章目录

  • 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相关推荐

  1. Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)

    真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...

  2. Pandas简明教程:八、Pandas数据透视表

    透视表(pivot)是由微软发明的一个概念,1993年微软注册了PivotTable这一商标,而他们又在2020年正式撤销了注册. 关于透视表的话题随便搜搜就是一大堆,而有些地方可能都吹得很神了.透视 ...

  3. Pandas简明教程-适用于竞赛、研究以及办公自动化

    数据的读.写.查.改是数据分析的基础,也是竞赛.研究以及办公自动化类项目的常用操作.为了让大家能以更简单的方法来操作数据,我们选择Pandas作为处理数据的工具,希望通过这个系列的教程能够帮助大家节省 ...

  4. Pandas简明教程:五、Pandas简单统计操作及通用方式

    文章目录 1.DataFrame的方法使用举例 2.DataFrame的方法调用通用方式 3.DataFrame直接调用其它方法 本系列教程教程完整目录: 前面已经提到,Pandas的DataFram ...

  5. Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)

    文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...

  6. Pandas简明教程:六、Pandas条件查询

    文章目录 1.基本方法 2.高级查询 3. 可用于修改内容的`where`方法 4.条件检索进阶:快速的查询方法`query` 5.其它检索方法简述 本系列教程教程完整目录: 目前大家公认的一个说法是 ...

  7. Pandas简明教程:三、Pandas文件读写

    文章目录 1.CSV文件 2.Excel的读写 3.HTML文件的读写 4.其它文件(数据)类型的简单说明 5.办公自动化问题简析 本系列教程教程完整目录: Pandas支持了非常丰富的文件类型(见文 ...

  8. Pandas简明教程:四、Pandas数据索引方式

    文章目录 1.以类似`dict`的方式访问 2.以属性方式访问数据 3.访问行(slicing) 4.用`loc`方法访问不同行列 5.用`iloc`方法直接访问行列 6.其它方式 本系列教程教程完整 ...

  9. Pandas简明教程:一、Pandas简介与安装

    文章目录 1.Pandas简介 2.为何要用Pandas? 3.知识.技能与环境的准备 4.Pandas的安装与相关辅助资料 本系列教程教程完整目录: 1.Pandas简介 关于Pandas的介绍在百 ...

最新文章

  1. [CQOI2010]扑克牌
  2. 理解JavaScript的原始类型
  3. layui 导航收缩代码_pycharm的十个小技巧,让你写代码效率翻倍
  4. mac 查看端口_如何重置mac上的系统管理控制器smc教程
  5. PHP error_reporting() 错误控制函数功能详解
  6. go struct 零值_《Go 语言程序设计》读书笔记 (五) 协程与通道
  7. Vivado安装教程详细版
  8. ubuntu18.04 安装 腾讯qq
  9. 3t studio 导出数据_Studio 3T下操作MongoDB的基本命令(转载)
  10. python数据分析水果_用python解决简单的水果分类问题
  11. 解决ValueError: Cannot run multiple SparkContexts at once; existing SparkContext
  12. GNN学习笔记(三) Graph Neural Network概述
  13. [经验] 系统封装常见问题大总结(非官方)
  14. 流程驱动管理vs 数据驱动管理
  15. ubuntu18.10安装网易云音乐,并解决网易云音乐图标无法启动的问题
  16. 听说一个漂亮的小姐姐图片是程序员无法抗拒的
  17. 【知识分享】C语言中的设计模式——命令模式
  18. POI-word模板替换
  19. FlyMcu下载出现“从08000000开始运行失败...可能是因为刚写了选项字节!!!”解决方法!
  20. WordPress插件 | 在WordPress中使用FontAwesome

热门文章

  1. 手机4k读写速度测试软件,4K扇区速度测试及读写IOPS_Intel 520_固态硬盘评测-中关村在线...
  2. Linux脚本点空格,linux – 在bash脚本中使用引号和空格的awk
  3. taglib遍历foreach循环list集合
  4. spring boot创建多模块聚合工程
  5. 十进制、十六进制、二进制习题
  6. ubuntu11.10设置了pppoe(自动拨号后),开机速度慢和无法连接无线网都解决办法...
  7. 第六章 BitArray类
  8. Android平台 Psensor传感器调试方法
  9. 如何导出wince6.0的SDK
  10. jenkins部署java项目(五)