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

1、以类似dict的方式访问

上一篇教程开头以dict的形式实例化了第一个DataFrame,也证实了它的确可以用类似dict的方式来获取数据:

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     张三
2     张三
3     张三
4     张三
5     李四
6     李四
7     李四
8     李四
9     王五
10    王五
11    王五
12    王五
Name: 姓名, dtype: object

在此基础上,还可以进一步进行复杂的操作,例如

  • 访问多列
df[['姓名','职位']]

    姓名  职位
0   张三  主犯
1   张三  主犯
2   张三  主犯
3   张三  主犯
4   张三  主犯
5   李四  从犯
6   李四  从犯
7   李四  从犯
8   李四  从犯
9   王五  龙套
10  王五  龙套
11  王五  龙套
12  王五  龙套
  • 当访问时列的顺序不同时
df[['职位','姓名']]

    职位  姓名
0   主犯  张三
1   主犯  张三
2   主犯  张三
3   主犯  张三
4   主犯  张三
5   从犯  李四
6   从犯  李四
7   从犯  李四
8   从犯  李四
9   龙套  王五
10  龙套  王五
11  龙套  王五
12  龙套  王五

另外,这种方式不权可以访问数据,还可以作为索引对数据进行修改,比如交换两个列:

df[['职位','姓名']] = df[['姓名','职位']]
# 姓名和职位的对应数据发生了改变
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  王五
2、以属性方式访问数据

以下代码可能引起不适!!!!

df.职位

0     张三
1     张三
2     张三
3     张三
4     张三
5     李四
6     李四
7     李四
8     李四
9     王五
10    王五
11    王五
12    王五
Name: 职位, dtype: object

它居然支持中文变量名!!!!

注意:这里和dict类型的操作方式就有所不同了,如果是一个单纯的dict我们来看:

mydict = {'a':1,'b':2}

mydict.a
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-9-20721cfb64a6> in <module>
----> 1 mydict.a

AttributeError: 'dict' object has no attribute 'a'

此时报错:dict并没有名称为a这个属性。而DataFrame则提供了这样一种索引方式。

上一篇教程,我们知道当访问的结果是一列时,返回的结果就变成了Series类。

3、访问行(slicing)
df[:2]

   月份  姓名 性别  应发工资  实发工资  职位
0   1  主犯  男  2000  1500  张三
1   2  主犯  男  2000  1000  张三

df[1:5]
 
   月份  姓名 性别  应发工资   实发工资  职位
1   2  主犯  男  2000   1000  张三
2   3  主犯  女  2000  15000  张三
3   4  主犯  女  2000   1500  张三
4   5  主犯  女  2000   1500  张三

注意: 这种方式不能以单个下标进行访问

df[2]

D:\ProgramData\Anaconda3\envs\pytorch\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
...## 此处省略约10余行报错信息

KeyError: 2

注意: 不能直接像访问数组一样访问单个单元信息:

df[1,2]
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
# 省略约20余行报错信息
4、用loc方法访问不同行列
df.loc[:2,['职位']]

   职位
0  张三
1  张三
2  张三

而此时可以访问单独的一行:

df.loc[2,['职位']]
 
职位    张三
Name: 2, dtype: object

注意:loc方法第二个位置的索引必须是表头的列表或字符串,不能是数字!

5、用iloc方法直接访问行列
df.iloc[1,2]
'男'

df.iloc[1,:2]

月份     2
姓名    主犯
Name: 1, dtype: object

df.iloc[:2,1]

0    主犯
1    主犯
Name: 姓名, dtype: object

不难看到这时数据的访问方式和数组等类型的访问方式就基本一致了。

6、其它方式

旧的版本里面还有ix方法,不过新版已经没有这项功能了,它的用法兼顾了lociloc方法。另外还有快速定位的方法at,iat,但这两种方法除了速度较快以外也并没有特别之处,因此不多叙述,有兴趣的同学可以自行查询官方文档

本系列教程教程完整目录:

一、Pandas简介与安装

二、Pandas基本数据结构-DataFrame与Series

三、Pandas文件读写

四、Pandas数据索引方式

五、Pandas简单统计操作及通用方式

六、Pandas条件查询

七、Pandas缺失数据的处理(数据清洗基础)

八、Pandas数据透视表

九、表的合并、连接、拼接(数据聚合基础)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半个冯博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值