python中df是什么_python数据分析之pandas数据选取:
df[]df.loc。。。
1 引⾔
Pandas是作为Python数据分析著名的⼯具包,提供了多种数据选取的⽅法,⽅便实⽤。本⽂主要介绍Pandas的⼏种数据选取的⽅法。
Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据选取的⽅式基本⼀致,本⽂主要以Dataframe为例进⾏介绍。
爱心吸管在Dataframe中选取数据⼤抵包括3中情况:
1)⾏(列)选取(单维度选取):df[]。这种情况⼀次只能选取⾏或者列,即⼀次选取中,只能为⾏或者列设置筛选条件(只能为⼀个维度设置筛选条件)。
2)区域选取(多维选取):df.loc[],df.iloc[],df.ix[]。这种⽅式可以同时为多个维度设置筛选条件。
居住证申请3)单元格选取(点选取):df.at[],df.iat[]。准确定位⼀个单元格。
接下来,我们以下⾯的数据为例,分别通过实例介绍这三种情况。
>>> importpandas as pd
>>> importnumpy as np
>>> data = {'name': ['Joe', 'Mike', 'Jack', 'Ro', '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 1yes
b Mike 32.00 yes
c Jack 18.0 1no
d Ros
e NaN 1yes
e David 15.00 no
f Marry 20.0 1no
g Wansi 41.00 no
h Sidy NaN 0 yes
i Jason 37.0 1no
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 1yes
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 1yes
b Mike 32.0 0 yes
注意:整数索引切⽚是前闭后开,标签索引切⽚是前闭后闭,这点尤其要注意。
c)布尔数组
选取前三⾏
>>>df[[True,True,True,Fal,Fal,Fal,Fal,Fal,Fal,Fal]]
name age gender isMarried
a Joe 25.0 1yes
b Mike 32.00 yes
c Jack 18.0 1 no
选取所有age⼤于30的⾏
>>> df[[each>30 for each in df['age']]]
name age gender isMarried
bot项目b Mike 32.00 yes
g Wansi 41.00 no
i Jason 37.0 1no
j Even 32.0 0 no
通过布尔数组的⽅式,⼜可以衍⽣出下⾯的选取⽅式:
选取所有age⼤于30的⾏怎么会得糖尿病
>>> df[df['age']>30]
name age gender isMarried
b Mike 32.00 yes
g Wansi 41.00 no
i Jason 37.0 1no
j Even 32.0 0 no
选取出所有age⼤于30,且isMarried为no的⾏
>>> df[(df['age']>30) & (df['isMarried']=='no')]
name age gender isMarried
g Wansi 41.00 no
i Jason 37.0 1no
j Even 32.0 0 no
选取出所有age为20或32的⾏
>>> df[(df['age']==20) | (df['age']==32)]
name age gender isMarried
b Mike 32.00 yes
f Marry 20.0 1no
j Even 32.0 0 no
注意:像上⾯这种通过多个布尔条件判断的情况,多个条件最好(⼀定)⽤括号括起来,否则⾮常容易出错。2)列选取
列选取⽅式也有三种:标签索引、标签列表、Callable对象
a)标签索引:选取单个列
选取name列所有数据
>>> df['name']
a Joe
b Mike
c Jack
d Ro
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
d Ros
e NaN
e David 15.0
f Marry 20.0
g Wansi 41.0
h Sidy NaN
i Jason 37.0j Even 32.0
c)callable对象
选取第⼀列
>>> df[lambdadf: df.columns[0]]
a Joe
b Mike
c Jack
d Ro
e David
f Marry
g Wansi
诸葛亮的诫子书h Sidy
i Jason
j Even
Name: name, dtype: object
3 区域选取
区域选取可以从多个维度(⾏和列)对数据进⾏筛选,可以通过df.loc[],df.iloc[],df.ix[]三种⽅法实现。采⽤df.loc[],df.iloc[],df.ix[]这三种⽅法进⾏数据选取时,⽅括号内必须有两个参数,第⼀个参数是对⾏的筛选条件,第⼆个参数是对列的筛选条件,两个参数⽤逗号隔开。df.loc[],df.iloc[],df.ix[]的区别如下:
df.loc[]只能使⽤标签索引,不能使⽤整数索引,通过便签索引切边进⾏筛选时,前闭后闭。
df.iloc[]只能使⽤整数索引,不能使⽤标签索引,通过整数索引切边进⾏筛选时,前闭后开。;
df.ix[]既可以使⽤标签索引,也可以使⽤整数索引。下⾯分别通过实例演⽰这三种⽅法。
3.1 df.loc[]
1)对⾏进⾏选取
选取索引为‘a’的⾏:
>>> df.loc['a', :]
name Joe
age 25gender 1isMarried yes
Name: a, dtype: object
选取索引为‘a’或‘b’或‘c’的⾏
>>> df.loc[['a','b','c'], :]
name age gender isMarried
a Joe 25.0 1yes
b Mike 32.00 yes
c Jack 18.0 1 no
选取从‘a’到‘d’的所有⾏(包括‘d’⾏)>>> df.loc['a':'d', :]
name age gender isMarried
a Joe 25.0 1yes
b Mike 32.00 yes
c Jack 18.0 1no
d Ros
e NaN 1 yes
⽤布尔数组选取前3⾏
>>>df.loc[[True,True,True,Fal,Fal,Fal], :] name age gender isMarried
a Joe 25.0 1yes
b Mike 32.00 yes
c Jack 18.0 1 no
选取所有age⼤于30的⾏
>>> df.loc[df['age']>30,:]
name age gender isMarried
b Mike 32.00 yes
g Wansi 41.00 no
i Jason 37.0 1no