Pandas 索引和数据查询

Pandas 索引和数据查询的操作实例

在本章中,我们将讨论如何对日期进行切片和切块,并获得Pandas对象的子集。
Python和NumPy索引运算符“[]”和属性运算符“.”。可以在各种用例中快速轻松地访问Pandas数据结构。但是,由于事先不知道要访问的数据类型,因此直接使用标准运算符存在一些优化限制。对于生产代码,我们建议您利用本章中介绍的优化的熊猫数据访问方法。
Pandas现在支持三种类型的多轴索引:下表中提到了三种类型-

索引说明
.loc()基于标签
.iloc()基于整数
.ix()基于标签和整数

.loc()

Pandas 提供了多种方法来具有纯粹基于标签的索引。切片时,还包括起始边界。整数是有效的标签,但它们引用的是标签而不是位置。

.loc() 具有多种访问方法,例如:

一个标量标签标签列表切片对象布尔数组

loc 需要两个单/列表/范围运算符,以“,”分隔。第一个指示行,第二个指示列。

案例 1

#导入pandas库并起别名pdimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=['A','B','C','D'])#选择特定列的所有行print(df.loc[:,'A'])

运行结果:

a0.391548b-0.070649c-0.317212d-2.162406e2.202797f0.613709g1.050559h1.122680Name:A,dtype:float64

实例 2

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=['A','B','C','D'])#为多个列选择所有行,比如list[]print(df.loc[:,['A','C']])

运行结果:

ACa0.3915480.745623b-0.0706491.620406c-0.3172121.448365d-2.162406-0.873557e2.2027970.528067f0.6137090.286414g1.0505590.216526h1.122680-1.621420

实例 3

#导入pandas库并起别名pdimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=['A','B','C','D'])#为多个列选择几行,比如list[]print(df.loc[['a','b','f','h'],['A','C']])

运行结果:

ACa0.3915480.745623b-0.0706491.620406f0.6137090.286414h1.122680-1.621420

实例 4

#导入pandas库并起别名pdimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=['A','B','C','D'])#为所有列选择行范围print(df.loc['a':'h'])

运行结果:

ABCDa0.391548-0.2242970.7456230.054301b-0.070649-0.8801301.6204061.419743c-0.317212-1.9296981.4483650.616899d-2.1624060.614256-0.8735571.093958e2.202797-2.3159150.5280670.612482f0.613709-0.1576740.286414-0.500517g1.050559-2.2720990.2165260.928449h1.1226800.324368-1.621420-0.741470

实例 5

#导入pandas库并起别名pdimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=['A','B','C','D'])#用于使用布尔数组获取值print(df.loc['a']>0)

运行结果:

AFalseBTrueCFalseDFalseName:a,dtype:bool

.iloc()

Pandas 提供了多种方法来获得纯粹基于整数的索引。像python和numpy一样,它们都是基于0的索引。
各种访问方法如下:

整数整数列表值范围

实例1

#导入pandas库并起别名pdimportpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])#选择特定列的所有行print(df.iloc[:4])

运行结果:

ABCD00.6994350.256239-1.270702-0.6451951-0.6853540.890791-0.8130120.6316152-0.783192-0.5313780.0250700.23080630.539042-1.2843140.826977-0.026251

实例 2

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])#整数切片print(df.iloc[:4]print(df.iloc[1:5,2:4])

运行结果:

ABCD00.6994350.256239-1.270702-0.6451951-0.6853540.890791-0.8130120.6316152-0.783192-0.5313780.0250700.23080630.539042-1.2843140.826977-0.026251CD1-0.8130120.63161520.0250700.23080630.826977-0.02625141.4233321.130568

实例 3

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])#对值列表进行切片print(df.iloc[[1,3,5],[1,3]]print(df.iloc[1:3,:])print(df.iloc[:,1:3])

运行结果:

BD10.8907910.6316153-1.284314-0.0262515-0.512888-0.518930ABCD1-0.6853540.890791-0.8130120.6316152-0.783192-0.5313780.0250700.230806BC00.256239-1.27070210.890791-0.8130122-0.5313780.0250703-1.2843140.8269774-0.4607291.4233325-0.5128880.5814096-1.2048530.0980607-0.9478570.641358

.ix()

除了基于纯标签和基于整数的方法外,Pandas还提供了一种混合方法,用于使用.ix()运算符选择和子集对象。

实例 1

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])#整数切片print(df.ix[:4])

运行结果:

ABCD00.6994350.256239-1.270702-0.6451951-0.6853540.890791-0.8130120.6316152-0.783192-0.5313780.0250700.23080630.539042-1.2843140.826977-0.026251

实例 2

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])#索引切片print(df.ix[:,'A'])

运行结果:

00.6994351-0.6853542-0.78319230.5390424-1.0442095-1.41541161.06209570.994204Name:A,dtype:float64

符号的使用

通过多轴索引从Pandas对象获取值使用以下符号:

对象索引器返回类型
Seriess.loc[indexer]标量值
DataFramedf.loc[row_index,col_index]Series 对象
Panelp.loc[item_index,major_index, minor_index]p.loc[item_index,major_index, minor_index]

.iloc()和.ix()应用相同的索引选项和返回值。

我们看看如何对DataFrame对象执行每个操作。我们将使用基本索引运算符'[]'-

实例 1

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])print(df['A'])

运行结果:

0-0.47889310.39193120.3368253-1.0551024-0.1652185-0.32864160.5677217-0.759399Name:A,dtype:float64

我们可以将值列表传递给[]以选择那些列

实例 2

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])print(df[['A','B']])

运行结果:

AB0-0.478893-0.60631110.391931-0.94902520.3368250.0937173-1.055102-0.0129444-0.1652181.5503105-0.328641-0.22636360.567721-0.3125857-0.759399-0.372696

实例 3

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])print(df[2:2])

运行结果:

Columns:[A,B,C,D]Index:[]

属性访问

可以使用属性运算符“。”选择列。

实例

importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.random.randn(8,4),columns=['A','B','C','D'])print(df.A)

运行结果:

0-0.47889310.39193120.3368253-1.0551024-0.1652185-0.32864160.5677217-0.759399Name:A,dtype:float64
编辑于2024-05-20 14:47