详解pandas DataFrame的查询方法(loc, iloc, at, iat, ix的用法和区别)
在pandas中,DataFrame是一个非常常用的数据结构。DataFrame支持多种查询方法,常见的有loc、iloc、at、iat和ix这几种方法。本文将详细讲解这几种查询方法的用法和区别。
loc (location的缩写)
loc方法是一种基于标签(row label和column label)的查询方法。它的语法如下:
DataFrame.loc[row_indexer,column_indexer]
其中,row_indexer和column_indexer均为一组标签,可以是单个标签,也可以是标签的列表、切片、布尔数组等。例如,如果我们要查询DataFrame df中第1行和第3行,并且只需要显示"姓名"和"分数"这两列的内容,我们可以使用以下代码:
df.loc[[1,3],["姓名","分数"]]
loc方法的一些常见用法:
- 单个标签查询:DataFrame.loc[标签],例如DataFrame.loc[2]表示查询DataFrame中第3行的所有列;
- 多个标签查询:DataFrame.loc[[标签1,标签2,...], :],例如DataFrame.loc[[1,2],:]表示查询DataFrame中第1行和第2行的所有列;
- 切片查询:DataFrame.loc[起始标签:结束标签, :],例如DataFrame.loc[2:4,:]表示查询DataFrame中第3~第5行的所有列;
- 布尔数组查询:DataFrame.loc[布尔数组, :],例如DataFrame.loc[df["性别"]=="男",:]表示查询DataFrame中所有“性别”为“男”的行的所有列。
iloc(integer location的缩写)
iloc方法是一种基于位置的查询方法。它的语法如下:
DataFrame.iloc[row_indexer,column_indexer]
其中,row_indexer和column_indexer均为一组整数,可以是单个整数,也可以是整数的列表、切片、布尔数组等。例如,如果我们要查询DataFrame df中第1行和第3行,并且只需要显示"姓名"和"分数"这两列的内容,我们可以使用以下代码:
df.iloc[[0,2],[0,3]]
iloc方法的一些常见用法:
- 单个整数查询:DataFrame.iloc[整数],例如DataFrame.iloc[2]表示查询DataFrame中第3行的所有列;
- 多个整数查询:DataFrame.iloc[[整数1,整数2,...], :],例如DataFrame.iloc[[0,1],:]表示查询DataFrame中第1行和第2行的所有列;
- 切片查询:DataFrame.iloc[起始整数:结束整数, :],例如DataFrame.iloc[2:4,:]表示查询DataFrame中第3~第5行的所有列;
- 布尔数组查询:DataFrame.iloc[布尔数组, :],例如DataFrame.iloc[df["性别"]=="男",:]表示查询DataFrame中所有“性别”为“男”的行的所有列。
at
at方法是一种查询单个元素的方法,它的语法如下:
DataFrame.at[row_indexer,column_indexer]
其中,row_indexer和column_indexer均为单个标签,因此at方法只能用于查询单个元素。例如,如果我们要查询DataFrame df中第3行、第4列的元素,我们可以使用以下代码:
df.at[2,"分数"]
iat
iat方法是一种查询单个元素的方法,它的语法如下:
DataFrame.iloc[row_indexer,column_indexer]
其中,row_indexer和column_indexer均为单个整数,因此iat方法只能用于查询单个元素。例如,如果我们要查询DataFrame df中第2行、第3列的元素,我们可以使用以下代码:
df.iat[1,2]
ix
在pandas 0.20.0以上的版本中,ix方法已被弃用。如果要同时使用标签和位置进行查询,可以使用loc和iloc方法,并使用显式的“标签”或“位置”前缀来指示要使用的搜索方法。例如,以下代码与ix方法的效果相同:
df.loc[df.index[1:3], ["姓名","分数"]]
df.iloc[1:3,0:2]
示例说明
为了更好地理解这些方法的用法,我们将使用以下DataFrame df进行演示。df表示3名学生的学习情况,包括“姓名”、“性别”、“分数”三列数据。
df = pd.DataFrame({'姓名': ['张三', '李四', '王五'], '性别': ['男', '男', '女'], '分数': [80, 90, 85]})
示例1:
查询df中“姓名”为“李四”和“王五”的行信息(包含数据的所有列)。
df.loc[df["姓名"].isin(["李四","王五"]),:]
df.iloc[[1,2],:]
以上两种方法都可以实现相同的效果。在这种情况下,我们可以看出loc方法和iloc方法的查询方法基本一致。
示例2:
查询df中“姓名”为“张三”的学生成绩。
df.loc[df["姓名"]=="张三","分数"].values[0]
df.at[0,"分数"]
以上两种方法都可以实现相同的效果。可以看出,我们无法只使用loc方法查询单个元素,而at方法则可以直接查询。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别) - Python技术站