没有合适的资源?快使用搜索试试~ 我知道了~
首页pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
资源详情
资源评论
资源推荐

pandas数据选取:数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
主要介绍了pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[],文中通过示例代码介绍的非常详细,对大
家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1 引言引言
Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据
选取的方法。
Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据选取的方式基本一致,本文主要以
Dataframe为例进行介绍。
在Dataframe中选取数据大抵包括3中情况:
1)行(列)选取(单维度选取):df[]。这种情况一次只能选取行或者列,即一次选取中,只能为行或者列设置筛选条件
(只能为一个维度设置筛选条件)。
2)区域选取(多维选取):df.loc[],df.iloc[],df.ix[]。这种方式可以同时为多个维度设置筛选条件。
3)单元格选取(点选取):df.at[],df.iat[]。准确定位一个单元格。
接下来,我们以下面的数据为例,分别通过实例介绍这三种情况。
>>> import pandas as pd
>>> import numpy as np
>>> data = {'name': ['Joe', 'Mike', 'Jack', 'Rose', 'David', 'Marry', 'Wansi', 'Sidy', 'Jason', 'Even'],
'age': [25, 32, 18, np.nan, 15, 20, 41, np.nan, 37, 32],
'gender': [1, 0, 1, 1, 0, 1, 0, 0, 1, 0],
'isMarried': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}
>>> labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
>>> df = pd.DataFrame(data, index=labels)
>>> df
name age gender isMarried
a Joe 25.0 1 yes
b Mike 32.0 0 yes
c Jack 18.0 1 no
d Rose NaN 1 yes
e David 15.0 0 no
f Marry 20.0 1 no
g Wansi 41.0 0 no
h Sidy NaN 0 yes
i Jason 37.0 1 no
j Even 32.0 0 no
2 行(列)选取:行(列)选取:df[]
行(列)选取是在单一维度上进行数据的选取,即以行为单位进行选取或者以列为单位进行选取。Dataframe对象的行有
索引(index),默认情况下是[0,1,2,……]的整数序列,也可以自定义添加另外的索引,例如上面的labels,(为区分默认索
引和自定义的索引,在本文中将默认索引称为整数索引,自定义索引称为标签索引)。Dataframe对象的每一列都有列名,可
以通过列名实现对列的选取。
1)选取行)选取行
选取行的方式包括三种:整数索引切片、标签索引切片和布尔数组。
a)整数索引切片:前闭后开

选取第一行:
>>> df[0:1]
name age gender isMarried
a Joe 25.0 1 yes
选取前两行:
>>> df[0:2]
name age gender isMarried
a Joe 25.0 1 yes
b Mike 32.0 0 yes
b)标签索引切片:前闭后闭
选取第一行:
>>> df[:'a']
name age gender isMarried
a Joe 25.0 1 yes
选取前两行:
>>> df['a':'b']
name age gender isMarried
a Joe 25.0 1 yes
b Mike 32.0 0 yes
注意:整数索引切片是前闭后开,标签索引切片是前闭后闭,这点尤其要注意。
c)布尔数组
选取前三行
>>> df[[True,True,True,False,False,False,False,False,False,False]]
name age gender isMarried
a Joe 25.0 1 yes
b Mike 32.0 0 yes
c Jack 18.0 1 no
选取所有age大于30的行
>>> df[[each>30 for each in df['age']]]
name age gender isMarried
b Mike 32.0 0 yes
g Wansi 41.0 0 no
i Jason 37.0 1 no
j Even 32.0 0 no
通过布尔数组的方式,又可以衍生出下面的选取方式:
选取所有age大于30的行
>>> df[df['age']>30]
name age gender isMarried

b Mike 32.0 0 yes
g Wansi 41.0 0 no
i Jason 37.0 1 no
j Even 32.0 0 no
选取出所有age大于30,且isMarried为no的行
>>> df[(df['age']>30) & (df['isMarried']=='no')]
name age gender isMarried
g Wansi 41.0 0 no
i Jason 37.0 1 no
j Even 32.0 0 no
选取出所有age为20或32的行
>>> df[(df['age']==20) | (df['age']==32)]
name age gender isMarried
b Mike 32.0 0 yes
f Marry 20.0 1 no
j Even 32.0 0 no
注意:像上面这种通过多个布尔条件判断的情况,多个条件最好(一定)用括号括起来,否则非常容易出错。
2)列选取
列选取方式也有三种:标签索引、标签列表、Callable对象
a)标签索引:选取单个列
选取name列所有数据
>>> df['name']
a Joe
b Mike
c Jack
d Rose
e David
f Marry
g Wansi
h Sidy
i Jason
j Even
Name: name, dtype: object
b)标签列表:选取多个列
选取name和age两列数据
>>> df[['name','age']]
name age
a Joe 25.0
b Mike 32.0
c Jack 18.0
剩余10页未读,继续阅读
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0