python pandas.DataFrame.loc函数使用详解
官方函数
DataFrame.loc
Accessagroupofrowsandcolumnsbylabel(s)orabooleanarray.
.loc[]isprimarilylabelbased,butmayalsobeusedwithabooleanarray.
#可以使用label值,但是也可以使用布尔值
- Allowedinputsare:#可以接受单个的label,多个label的列表,多个label的切片
- Asinglelabel,e.g.5or‘a',(notethat5isinterpretedasalabeloftheindex,andneverasanintegerpositionalongtheindex).#这里的5不是数值指定的位置,而是label值
- Alistorarrayoflabels,e.g.[‘a',‘b',‘c'].
sliceobjectwithlabels,e.g.‘a':'f'.
Warning:#如果使用多个label的切片,那么切片的起始位置都是包含的
Notethatcontrarytousualpythonslices,boththestartandthestopareincluded
- Abooleanarrayofthesamelengthastheaxisbeingsliced,e.g.[True,False,True].
实例详解
一、选择数值
1、生成df
df=pd.DataFrame([[1,2],[4,5],[7,8]], ...index=['cobra','viper','sidewinder'], ...columns=['max_speed','shield']) df Out[15]: max_speedshield cobra12 viper45 sidewinder78
2、Singlelabel.单个row_label返回的Series
df.loc['viper'] Out[17]: max_speed4 shield5 Name:viper,dtype:int64
2、Listoflabels.列表row_label返回的DataFrame
df.loc[['cobra','viper']] Out[20]: max_speedshield cobra12 viper45
3、Singlelabelforrowandcolumn同时选定行和列
df.loc['cobra','shield'] Out[24]:2
4、Slicewithlabelsforrowandsinglelabelforcolumn.Asmentionedabove,notethatboththestartandstopofthesliceareincluded.同时选定多个行和单个列,注意的是通过列表选定多个rowlabel时,首位均是选定的。
df.loc['cobra':'viper','max_speed'] Out[25]: cobra1 viper4 Name:max_speed,dtype:int64
5、Booleanlistwiththesamelengthastherowaxis布尔列表选择rowlabel
布尔值列表是根据某个位置的TrueorFalse来选定,如果某个位置的布尔值是True,则选定该row
df Out[30]: max_speedshield cobra12 viper45 sidewinder78 df.loc[[True]] Out[31]: max_speedshield cobra12 df.loc[[True,False]] Out[32]: max_speedshield cobra12 df.loc[[True,False,True]] Out[33]: max_speedshield cobra12 sidewinder78
6、ConditionalthatreturnsabooleanSeries条件布尔值
df.loc[df['shield']>6] Out[34]: max_speedshield sidewinder78
7、ConditionalthatreturnsabooleanSerieswithcolumnlabelsspecified条件布尔值和具体某列的数据
df.loc[df['shield']>6,['max_speed']] Out[35]: max_speed sidewinder7
8、CallablethatreturnsabooleanSeries通过函数得到布尔结果选定数据
df Out[37]: max_speedshield cobra12 viper45 sidewinder78 df.loc[lambdadf:df['shield']==8] Out[38]: max_speedshield sidewinder78
二、赋值
1、Setvalueforallitemsmatchingthelistoflabels根据某列表选定的row及某列column赋值
df.loc[['viper','sidewinder'],['shield']]=50 df Out[43]: max_speedshield cobra12 viper450 sidewinder750
2、Setvalueforanentirerow将某行row的数据全部赋值
df.loc['cobra']=10 df Out[48]: max_speedshield cobra1010 viper450 sidewinder750
3、Setvalueforanentirecolumn将某列的数据完全赋值
df.loc[:,'max_speed']=30 df Out[50]: max_speedshield cobra3010 viper3050 sidewinder3050
4、Setvalueforrowsmatchingcallablecondition条件选定rows赋值
df.loc[df['shield']>35]=0 df Out[52]: max_speedshield cobra3010 viper00 sidewinder00
三、行索引是数值
df=pd.DataFrame([[1,2],[4,5],[7,8]], ...index=[7,8,9],columns=['max_speed','shield']) df Out[54]: max_speedshield 712 845 978
通过行rows的切片的方式取多个:
df.loc[7:9] Out[55]: max_speedshield 712 845 978
四、多维索引
1、生成多维索引
tuples=[ ...('cobra','marki'),('cobra','markii'), ...('sidewinder','marki'),('sidewinder','markii'), ...('viper','markii'),('viper','markiii') ...] index=pd.MultiIndex.from_tuples(tuples) values=[[12,2],[0,4],[10,20], ...[1,4],[7,1],[16,36]] df=pd.DataFrame(values,columns=['max_speed','shield'],index=index) df Out[57]: max_speedshield cobramarki122 markii04 sidewindermarki1020 markii14 vipermarkii71 markiii1636
2、Singlelabel.传入的就是最外层的rowlabel,返回DataFrame
df.loc['cobra'] Out[58]: max_speedshield marki122 markii04
3、Singleindextuple.传入的是索引元组,返回Series
df.loc[('cobra','markii')] Out[59]: max_speed0 shield4 Name:(cobra,markii),dtype:int64
4、Singlelabelforrowandcolumn.如果传入的是row和column,和传入tuple是类似的,返回Series
df.loc['cobra','marki'] Out[60]: max_speed12 shield2 Name:(cobra,marki),dtype:int64
5、Singletuple.Noteusing[[]]returnsaDataFrame.传入一个数组,返回一个DataFrame
df.loc[[('cobra','markii')]] Out[61]: max_speedshield cobramarkii04
6、Singletuplefortheindexwithasinglelabelforthecolumn获取某个colum的某row的数据,需要左边传入多维索引的tuple,然后再传入column
df.loc[('cobra','marki'),'shield'] Out[62]:2
7、传入多维索引和单个索引的切片:
df.loc[('cobra','marki'):'viper'] Out[63]: max_speedshield cobramarki122 markii04 sidewindermarki1020 markii14 vipermarkii71 markiii1636 df.loc[('cobra','marki'):'sidewinder'] Out[64]: max_speedshield cobramarki122 markii04 sidewindermarki1020 markii14 df.loc[('cobra','marki'):('sidewinder','marki')] Out[65]: max_speedshield cobramarki122 markii04 sidewindermarki1020
到此这篇关于pythonpandas.DataFrame.loc函数使用详解的文章就介绍到这了,更多相关pandas.DataFrame.loc函数内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!