pandas 数据索引与选取的实现方法
我们对DataFrame进行选择,大抵从这三个层次考虑:行列、区域、单元格。
其对应使用的方法如下:
一.行,列-->df[]
二.区域 -->df.loc[],df.iloc[],df.ix[]
三.单元格-->df.at[],df.iat[]
下面开始练习:
importnumpyasnp importpandasaspd df=pd.DataFrame(np.random.randn(6,4),index=list('abcdef'),columns=list('ABCD'))
1.df[]:
一维
行维度:
整数切片、标签切片、<布尔数组>
列维度:
标签索引、标签列表、Callable
df[:3] df['a':'c'] df[[True,True,True,False,False,False]]#前三行(布尔数组长度等于行数) df[df['A']>0]#A列值大于0的行 df[(df['A']>0)|(df['B']>0)]#A列值大于0,或者B列大于0的行 df[(df['A']>0)&(df['C']>0)]#A列值大于0,并且C列大于0的行
df['A'] df[['A','B']] df[lambdadf:df.columns[0]]#Callable
2.df.loc[]
二维,先行后列
行维度:
标签索引、标签切片、标签列表、<布尔数组>、Callable
列维度:
标签索引、标签切片、标签列表、<布尔数组>、Callable
df.loc['a',:] df.loc['a':'d',:] df.loc[['a','b','c'],:] df.loc[[True,True,True,False,False,False],:]#前三行(布尔数组长度等于行数) df.loc[df['A']>0,:] df.loc[df.loc[:,'A']>0,:] df.loc[df.iloc[:,0]>0,:] df.loc[lambda_df:_df.A>0,:]
df.loc[:,'A'] df.loc[:,'A':'C'] df.loc[:,['A','B','C']] df.loc[:,[True,True,True,False]]#前三列(布尔数组长度等于行数) df.loc[:,df.loc['a']>0]#a行大于0的列 df.loc[:,df.iloc[0]>0]#0行大于0的列 df.loc[:,lambda_df:['A','B']]
df.A.loc[lambdas:s>0]
3.df.iloc[]
二维,先行后列
行维度:
整数索引、整数切片、整数列表、<布尔数组>
列维度:
整数索引、整数切片、整数列表、<布尔数组>、Callable
df.iloc[3,:] df.iloc[:3,:] df.iloc[[0,2,4],:] df.iloc[[True,True,True,False,False,False],:]#前三行(布尔数组长度等于行数) df.iloc[df['A']>0,:]#×为什么不行呢?想不通! df.iloc[df.loc[:,'A']>0,:]#× df.iloc[df.iloc[:,0]>0,:]#× df.iloc[lambda_df:[0,1],:]
df.iloc[:,1] df.iloc[:,0:3] df.iloc[:,[0,1,2]] df.iloc[:,[True,True,True,False]]#前三列(布尔数组长度等于行数) df.iloc[:,df.loc['a']>0]#× df.iloc[:,df.iloc[0]>0]#× df.iloc[:,lambda_df:[0,1]]
4.df.ix[]
二维,先行后列
行维度:
整数索引、整数切片、整数列表、
标签索引、标签切片、标签列表、
<布尔数组>、
Callable
列维度:
整数索引、整数切片、整数列表、
标签索引、标签切片、标签列表、
<布尔数组>、
Callable
df.ix[0,:] df.ix[0:3,:] df.ix[[0,1,2],:] df.ix['a',:] df.ix['a':'d',:] df.ix[['a','b','c'],:]
df.ix[:,0] df.ix[:,0:3] df.ix[:,[0,1,2]] df.ix[:,'A'] df.ix[:,'A':'C'] df.ix[:,['A','B','C']]
5.df.at[]
精确定位单元格
行维度:
标签索引
列维度:
标签索引
df.at['a','A']
6.df.iat[]
精确定位单元格
行维度:
整数索引
列维度:
整数索引
df.iat[0,0]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。