【python】pythonvsExcel(如何通过loc与iloc函数处理Excel数
据)
⼀,loc函数及iloc函数的使⽤及区别薛之谦前妻
Pandas中的loc和iloc两个函数的⽤法基本相同。iloc与之不同的是它读取数据使⽤⾏索引跟列索引来对数据进⾏定位选取。⽽loc函数可以通过⾏名跟列名来对数据进⾏选取。也就是字符串或者字母。另外对于索引⽅⾯,虽然loc⽅法中也⽀持对⾏,列使⽤Int类型做筛选跟切⽚。但是这个是与iloc有所不同的是在loc中的0:2是真的代表把索引为0:2的数据选取出来。⽽iloc中的0:2则选取的内容中不包括2.最多取到1。在这⼀点上⼀定要注意其中的区别。
⼆,loc函数于iloc函数使⽤对⽐
1. 对单元格进⾏取值
注释:loc在取值时0代表⾏号,因为在没有指定⾏号的情况下默认是数字0开始分配的。逗号之后代表列名
iloc在取值时逗号前的0跟loc相同也是⾏索引,⽽后⾯取值⽤的是列的索引值⽽不能是列名
1#%%
2
3import pandas as pd
4
5 df = pd.read_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\student_info.xlsx",
6                    sheet_name=0)
7
8 df.head(3)
9#%%
10 loc01 = df.loc[0,"姓名"]
11 loc01
12#%%
13 iloc01 = df.iloc[0,1]
14 iloc01
2. 读取⾏数据
注释:loc取值时候可以通过切⽚的⽅式取值0:0代表只去当前这第⼀列
iloc取值时对⽐loc唯⼀不同的是虽然也只是对⾏索引进⾏操作。但是切⽚后⾯的值位1⽽不是0因为如果是0的话,默认取值取到的是⼆维数组的表头也就是列名
#%%
loc02 = df.loc[0:0]
loc02
#%%
iloc02 = df.iloc[0:1]
iloc02
3. 读取所选指定范围的数据
需求:读取姓名和总分前4⾏的数据
注释:这⾥两者逗号前都是使⽤了切⽚的⽅式指定⾏数据,⽽逗号后⾯则是通过列表指定列名的⽅式来读取的。当然iloc是通过列索引来读取的。
#%%
loc03 = df.loc[0:3,["姓名","总分"]]
loc03
#%%
iloc03 = df.iloc[0:4,[1,5]]
iloc03
4. 通过切⽚来读取数据
注释:在前⾯的案例中其实已经使⽤了切⽚的⽅式,这⾥再来巩固⼀下。这⾥要注意的是,在逗号前的⾏索引切⽚中我使⽤了步长。也就是第⼆个分好的2,意思代表每隔1⾏进⾏读取。
对⽐iloc⽽⾔loc对于列的读取可以指定列名,这样在可读性⽅⾯⼤⼤优于Iloc。iloc1:6谁知道1:6是个什么⿁。还要⼀个个去数下标实在⿇烦。所以不同场景不同使⽤看个⼈爱好。
iloc03 = df.iloc[0:4,[1,5]]
iloc03
#%%
loc04 = df.loc[0:10:2,"姓名":"总分"]
loc04
#%%
iloc04 = df.iloc[0:11:2,1:6]
iloc04
5. 通过mask掩码对数据进⾏选取
需求:选出语⽂成绩⼤于80分的所有成员信息
注释:对于mask掩码,返回的是以True,False为值的布尔类型。有多少数据就返回多少个值。这⾥要强调的是建议使⽤loc来操作mask掩码也是最⽅便的。⽽iloc因为在下⾯的案例中我个⼈没能很好的演⽰成功也觉得⿇烦,所以不展⽰iloc的结果了。感兴趣的可以⾃⼰测试。测试过程中少些⼏个数据。。。
#%%
loc05 = df.loc[df["语⽂"]>80]
loc05
#%%
df["语⽂"]>80
需求2:筛选出班级2中,数学,语⽂,英语都⼤于80分的⼥⽣。
邱泽的女朋友是谁
注释:通过mask掩码的运⽤。我们可以直接给条件判断,条件成⽴则把数据筛选出来。这样做的好处在于不⽤再使⽤循环取值,可以⼤⼤节省IO的消耗。
df = pd.read_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\student_info.xlsx",
sheet_name=1)
df[(df["语⽂"]>80) & (df["数学"]>80) & (df["英语"]>80) & (df["性别"]=="⼥")]
三,综合案例演⽰
温碧霞老公
需求:student_info.xlsx这个表格中有5个班级的信息,分别通过5个sheet来保存的。当我们通过pandas来读取Excel的所有内容时必须指定sheet_name=None.但是如果设定为None,那么读取后的数据不在是⼀个DataFrame⽽是⼀个dict字典。那么如何把读取到的dict中的值,作为⼀个sheet重新保存到另外⼀个Excel中呢?这就是这个案例的价值。当然如果您的每个sheets中的内容过⼤,不建议合并成⼀个sheet。因为这样
在数据打开时直接导致内存消耗⽽打不开⽂件。另外转成⼀个sheet的好处就是当我们读取的时候不在是dict⽽是DataFrame格式,这样我们在筛选数据的时候可以直接调⽤DataFrame的⽅法⽽不是dict的
⽅法。
#%%
df = pd.read_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\student_info.xlsx",
sheet_name=None)
keys = list(df.keys()) #获取所有的sheet名的列表
#把所有sheet中的内容合并成⼀个sheet(数据量⼤的时候不推荐使⽤)
data_concat = pd.DataFrame()
for i in keys:
item = df[i]
data_concat = pd.concat([data_concat,item])
print(data_concat)
上海堡垒导演
_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\student_info_concat.xlsx",
index=False)
print("Done!")
#%%
df = pd.read_excel(R"C:\Users\Administrator\PycharmProjects\python_Basic\Pandas_to_Excel\20200727\student_info_concat.xlsx")
宋威龙的恋爱史loc06=df.loc[(df["班级"]==1) | (df["班级"]==2) & (df["语⽂"]>60) & (df["数学"]>60) & (df["英语"]>60) ]
loc06
#%%沉香如屑结局跟谁在一起
从演⽰效果来看是不是觉得作为DataFrame来读取表格数据⽐直接通过循环获取list,dict,set中的数据来的⽅便呀。所以应⽤好每个类,函