dateframe取子集总结
1.获取列
df['country']
df[['country','year']]
#不能通过df[0]获取第一列,如果想通过列的索引位置获取列需要用到loc
#获取所有列名
df.columns #得到一个Index类型
list(df.columns)#将得到的Index类型转成列表
2.获取行
df.loc[0]
df.loc['第一行名']
df.loc[[0,2,4]]
df.loc[['第1行名','第3行名','第5行名']]
df.loc[[::2]] #通过切片语法连续选择
#用法和loc类似iloc只能是纯索引,loc可以是行号或行名,loc不是索引取值所以不能loc[-1]
df.iloc[0]
df.iloc[-1]
3.混合取值
# loc和iloc的高级用法loc[,] 如果中间用一个逗号分隔之后,loc就不不积极只能去行了,而是取区域,逗号前面是取行,逗号后面是取列.
#由于在df中想取多个值需要传入一个列表,和原来的[]搭配起来看起来就很怪,如果恰巧碰上取一片区域看起来就更奇怪.
df.loc[[0,2,4],['第1列名','第2列名','第3列名']]
#搭配切片语法可以使用法看起来易懂一些,如通过loc和iloc获取第一列
df.loc[:,'第1列名']
df.iloc[:,0]
#错误用法 df.loc[:,0]
4.使用布尔值获取数据子集,这是条件筛选的基本实现原理
df[[True,False,True,False]]
df[df['age']>df['age'].mean()]
#比较时pandas内部使用广播实现,并返回一组布尔值
5.取值结果总结
dateframe取一列或一行得到series
df或series取index得到index类型数据
df或series取value得到array类型数据
df和series取值具体到单个值时得到具体值,如果一个df或一个series只有一个值,通过取一列,一行,value都不能得到那个具体值,使用df.iloc[0,0]可以去到值.
在df或series中取值时注意数据格式,int64和float64是不能被json化的.