版权声明:本文为博主原创文章,未经博主允许不得转载。
pandas是python进行数据分析必须掌握的基本技能。对于许多初学者而言,pandas中最基本的loc,iloc,at,iat等查询方法十分容易混淆。对于体量较小的数据而言excel能较好进行数据分析、整理工作,对于大多数数据工作者对excel都十分的熟悉。为了能更好的理解pandas的查询操作,这里选用excel作为对比材料,对相关的方法进行了描述,希望能对初学者学习pandas有所帮助.
l pandas的数据结构
pandas 有两个主要的数据结构,Series和DataFrame
Series类似一维数组的对象,简单点可以理解为excel单独的列。
DataFrame可以理解为excel中的一张表,注意Excel表中行编号默认从1开始,pandas是从0开始的。
l 利用pandas建立一张类似excel的表
#加载pandas import pandas as pd #创建一个Series数据,index是自动添加从0开始编排 column_0 = pd.Series(['A_00','A_10','A_20','A_30','A_40']) print(column_0) #创建一个另外四列数据,index是自动添加从0开始编排 column_1 = pd.Series(['B_01','B_11','B_21','B_31','B_41']) column_2 = pd.Series(['C_02','C_12','C_22','C_32','C_42']) column_3 = pd.Series(['D_03','D_13','D_23','D_33','D_43']) column_4 = pd.Series(['E_04','E_14','E_24','E_34','E_44']) #生成一个DataFrame,或者说一张Excel表,注意Excel是默认从1开始编排的 df = pd.DataFrame({'A' : column_0, 'B' : column_1, 'C' : column_2, 'D' : column_3, 'E' : column_4, }) print(df)
输出:
column_0:
A 0 A_00 1 A_10 2 A_20 3 A_30 4 A_40
A B C D E0 A_00 B_01 C_02 D_03 E_04 1 A_10 B_11 C_12 D_13 E_14 2 A_20 B_21 C_22 D_23 E_24 3 A_30 B_31 C_32 D_33 E_34 4 A_40 B_41 C_42 D_43 E_44
用excel做一张同样的表,请仔细对比和理解pandas中的DataFarme和excel表的区别和联系。为了便于理解将列DataFarme设计成Excel的形式从A开始编号。
l 如何在选取行(行的切片)--------[i:j]
Excel有交互界面可以任宜的选取行数据。
请注意在选取行的时候,行和列的编号也是被选中的。
Pandas选取行的方法
df[i,j]选取的是从i行道j-1行,所以df[1:3]为:
A B C D E 1 A_10 B_11 C_12 D_13 E_14 2 A_20 B_21 C_22 D_23 E_24
df[:j]选取的是从0到j-1行,df[i:]选取的是从i行道最后一行,所以df[2:]为:
A B C D E 2 A_20 B_21 C_22 D_23 E_24 3 A_30 B_31 C_32 D_33 E_34 4 A_40 B_41 C_42 D_43 E_44
通过上述方法可以实现excel中行数据的显示。
l 如何在选取列(列的切片)----------.loc以及.iloc
df.loc[:,['A']] #选取列名的列数据,选取多列用逗号隔开。输出结果为:
A 0 A_00 1 A_10 2 A_20 3 A_30 4 A_40
df.loc[0:2,['A']] #选取行列名的列数据,选取多列用逗号隔开。输出结果为:
A 0 A_00 1 A_10 2 A_20
Iloc与loc的区别在于,loc用的是行列的值作为引用的数据,而iloc用的是编号。
df.loc[0:2,['A']] 等同于 df.iloc[0:3,0:1]
请思考为什么前置0:2显示3列,而后者显示3列是0:3?
df.loc[:,['A']] 等同于 df.iloc[:,0:1]
理解了上述方法,基本可以选取到需要的切片了。
l 如何选取指定单元格的值(注意只是值,没有行列名)----------.at以及.iat
如果我们想快速的修改表中的某个值,必须有办法获取这个单元格的值,这里就要用到at以及iat,两者的区别类似loc以及iloc。
df.at[3,'B'] #输出结果为
B_31
df.at[3,'B'] 等同于 df.iat[3,1]
这个建立这个excel表的意义在于帮助理解python中的编号。
修改表中的值
df.iat[3,1] = 'select' #表变为:
A B C D E 0 A_00 B_01 C_02 D_03 E_04 1 A_10 B_11 C_12 D_13 E_14 2 A_20 B_21 C_22 D_23 E_24 3 A_30 select C_32 D_33 E_34 4 A_40 B_41 C_42 D_43 E_44