为了账号安全,请及时绑定邮箱和手机立即绑定

Series和DataFrame的数据取值与选择

标签:
Spark

数据取值与选择

NumPy数据取值的方法,包括取值操作(如arr[2, 1])、切片操作(如arr[:, 1:5])、掩码操作(如arr[arr > 0])、花哨的索引操作(如arr[0, [1, 5]]),以及组合操作(如arr[:, [1, 5]])。

在NumPy的二维数组里,data[0]返回第一行,而在DataFrame中,data['col0']返回第一列。

import numpy as npimport pandas as pd

Series数据选择方法

将Series看作字典

Series对象提供了键值对的映射。

data = pd.Series(np.linspace(0.25, 1, 4), index=['a', 'b', 'c', 'd'])
data
data['b']
# 用Python字典的表达式和方法来检测键/索引和值:'a' in data
data.keys()
data.items()
list(data.items())
# 增加新的索引值扩展Seriesdata['e'] = 1.25

将Series看作一维数组

具备和Numpy数组一样的数组数据选择功能,包括索引、掩码、花哨的索引操作。

# 将显式索引作为切片data['a':'c']
# 将隐式整数索引作为切片data[0:2]
# 掩码data[(data > 0.3) & (data < 0.8)]
# 花哨的索引data[['a', 'e']]

当使用显式索引(即
data['a':'c'])作切片时,结果包含最后一个索引;而当使用隐式索引(即 data[0:2])
作切片时,结果不包含最后一个索引。

索引器:loc、iloc和ix

如果Series是显式整数索引,那么data[1]这样的取值操作会使用显式索引,而data[1:3]这样的切片操作会使用隐式索引。

data = pd.Series(['a', 'b', 'c'], index=(1, 3, 5))
data
# 取值操作是显式索引data[1]
# 切片操作是隐式索引data[1:3]

Pandas提供的索引器(indexer)属性来取值的方法不是Series对象的函数方法,而是暴露切片接口的属性。

第一种索引器是loc属性,表示取值和切片都是显式的:

data.loc[1]
data.loc[1:3]

第二种是iloc属性,表示取值和切片都是Python形式(从0开始,左闭右开区间)的隐式索引:

data.iloc[1]
data.iloc[1:3]

第三种取值属性是ix,它是前两种索引器的混合形式。在Series对象中ix等价于标准的[](Python列表)取值方式。

在处理整数索引的对象时,强烈推进使用索引器,可以让代码阅读和理解起来更容易,也能避免因误用索引/切片而产生的小bug。

DataFrame数据选择方法

将DataFrame看作字典

把DataFrame当作一个由若干Series对象构成的字典。

area = pd.Series({'Guangzhou':55555, 'Shenzhen':44444, 'Dongguan':33333, 'Foshan':22222, 'Zhuhai':11111})
pop = pd.Series({'Guangzhou':51, 'Shenzhen':42, 'Dongguan':33, 'Foshan':24, 'Zhuhai':15})
data = pd.DataFrame({'area':area, 'pop':pop})
data

两个Series分别构成DataFrame的一列,可以通过对列名进行字典型是的取值获取数据。

data['area']
# 用字典形式语法调整对象data['density'] = data['pop']/data['area']
data

将DataFrame看作二维数组

data.values
data.T
data.values[0]
data['area']

Pandas索引器loc、iloc和ix

通过iloc索引器,像对待Numpy数组一样索引Pandas的底层数组(Python的隐式索引),DataFrame的行列标签会自动保留在结果中。

data.iloc[:3, :2]
data.loc[:'Guangzhou', :'pop']
# ix索引器实现混合效果data.ix[:3, :'pop']

loc属性,表示取值和切片都是显式的。

data.loc[data.index[[0,2]], ['area', 'pop']]
data.loc[data.index[[0,2]], 'area':'pop']
data.loc[:, ['area', 'pop']]
data.loc[:'Guangzhou', :'pop']

iloc属性,表示取值和切片都是Python形式的(从0开始,左闭右开区间)隐式索引。

data.iloc[[0,2], data.columns.get_loc('pop')]
data.iloc[0:2, data.columns.get_indexer(['area', 'pop'])]
data.iloc[0:2, 0:2]

如果对单个标签取值就选择列,而对多个标签用切片就选择行。

data['area']
data['Dongguan':'Guangzhou']

本文首发于steem,感谢阅读,转载请注明。

https://steemit.com/@padluo



作者:padluo
链接:https://www.jianshu.com/p/752976ba976a


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
205
获赞与收藏
1006

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消