pandas DataFrame的增删查改总结系列文章:html
在操做DataFrame时,确定会常常用到loc,iloc,at等函数,各个函数看起来差很少,可是仍是有不少区别的,咱们一块儿来看下吧。python
首先,仍是列出一个咱们用的DataFrame,注意index一列,以下:git
接下来,介绍下各个函数的用法:github
愿意看官方文档的,请戳这里,这里通常最权威。
loc函数是基于“标签”选择数据的,可是也能够接受一个boolean的array,对于每一个用法,咱们从参数方面来一一举例:数组
接受一个“标签”(label)参数,返回一个Series,例以下面这个例子收一个标签,返回经过这个标签订位的行的值,注意这里是经过标签订位,而不是经过中括号中的数字定位第几行,以后咱们经过对比iloc函数时还会细说。函数
test_dict_df.loc[1] #return the row with name 'Bob' test_dict_df.loc[7] #return the row with name 'Time' important!!! # type(test_dict_df.loc[1]) #pandas.core.series.Series
若是键入一个标签的array,那么就返回一个对应的DataFrame:spa
test_dict_df.loc[[1,2,4]]
结果以下:
3d
test_dict_df.loc[[1:4]]
结果以下:
code
经过在中括号中加入行标签和列标签来定位一个cell,至关于坐标的定位:htm
test_dict_df.loc[1,'english'] #result:94
test_dict_df.loc[1:4,'english'] # test_dict_df.loc[1:4,'english':'math']
例如咱们选择英语成绩超过90的全部行:
test_dict_df.loc[test_dict_df['english']>90]
固然,也能够再条件选择后,再加入列选择,列选择的时候能够单列,也能够是切片数组,经过上面的介绍这里就能够灵活处理:
test_dict_df.loc[test_dict_df['english']>90,'english'] #single label test_dict_df.loc[test_dict_df['english']>90,'english':'name'] #slice array test_dict_df.loc[test_dict_df['english']>90,['english','name']] #label array
能够接受一个boolean的array,至关于按照这个表的真假按照位置的顺序选择值
test_dict_df.loc[[True,False,False,True]]
loc还有不少用法,这里先介绍到这里吧,固然若是你的DataFrame是复合的行或者复合列,写法也是不一样的,具体就能够查阅官方文档了!
官方文档戳这里。
iloc函数与loc函数不一样的是,它接受的是一个数字,表明着要选择数据的位置:
test_dict_df.iloc[6]
这表明咱们选择的是第6行,而不是index为6的那一行。固然,也能够接受一个boolean的array,至关于按照这个表的真假按照位置的顺序选择值:
test_dict_df.iloc[[True,False,False,True]]
这里iloc也能够接受切片array:
# test_dict_df.iloc[1:2] test_dict_df.iloc[[1,2,4]]
ix就是一种混合索引,字符串的标签和证书的数据索引均可以做为合法输入,其实至关于loc和iloc的一个混合方法:
test_dict_df.ix['Alice'] test_dict_df.ix[1]
上述两种方法都能获得值,这里咱们就不追究这个函数具体是怎样的检索顺序或者工做原理了。由于官方给出的是从pandas0.20.0以后,ix函数已经被弃用。其实在使用的时候,ix函数虽然方便,可是的确有时候会显得比较混乱,因此咱们以后也尽可能少用这个函数吧,仍是按照官方大佬的指导。
at是用来选择单个值的,此时用法相似于loc:
test_dict_df.at[1,'english'] test_dict_df.loc[1,'english']
以上两种方法都能选择到,label为1,列为'english'的那个值,可是听说at速度要快,这点我没有考证过。
iat函数相对于at函数,就至关于iloc相对于loc函数。iat也只能选择一个值。只不过是用索引位置来选择,注意:行列都是索引位置来选择,从0开始数。
# test_dict_df.iat[1,'english'] #error!!! test_dict_df.iat[2,2] #right!!!
最后咱们归纳一下:
一、 loc和iloc函数都是用来选择某行的,iloc与loc的不一样是:iloc是按照行索引所在的位置来选取数据,参数只能是整数。而loc是按照索引名称来选取数据,参数类型依索引类型而定;
二、 at和iat函数是只能选择某个位置的值,iat是按照行索引和列索引的位置来选取数据的。而at是按照行索引和列索引来选取数据;
三、 loc和iloc函数的功能包含at和iat函数的功能。
相应的代码链接:github代码 先写到这里,若有新的再补充。