简述
pandas是python最为流行的科学库之一,它为我们提供了丰富的功能,借助这个宝可梦口袋,我们可以实现复杂的分组统计,链式处理等功能。这里我会用篇幅较大的内容介绍pandas常见函数的使用语法并配合例子,供读者使用。
正文
補充的知識點
axis
axis为0纵轴开始读取,axis为1表示从横轴开始读取,在我们平常使用的时候,指定这个axis参数可以指定pandas矩阵的处理方向,由此产生不同的效果。
concat函数
concat函數是一個拼接函數,可以實現pandas的dataframe或者series的拼接效果,可选参数如下
![](https://i-blog.csdnimg.cn/blog_migrate/b42f35db10fa4667f9d03db3ff33f3c9.png)
import pandas as pd
io = pd.io.excel.ExcelFile("2023年02月CC.CF.CH廠電話號碼一覽表.xls")
data =pd.read_excel(io, sheet_name="CA")
data = data[(data.職位!="N/A")&(data.姓名!="N/A")&(data.姓名!="NaN")]
dtName = data["姓名"]
dtPhone = data["CDMA手機"]
dtName01 = dtName[:4]
dtName02 = dtName[4:7]
pices = [dtName01,dtName02]
#使用key拼接
data = pd.concat(pices,keys=["a","b"])
print(data)
#移除原來的索引,ignore_index=True,key會失效
#axis为0表示纵向拼接
data = pd.concat(pices,keys=["a","b"],ignore_index=True,axis=0)
print(data.shape)
#移除原來的索引,ignore_index=True,key会生效效
#axis表示横行拼接
data = pd.concat(pices,keys=["a","b"],ignore_index=False,axis=1)
print(data)
![](https://i-blog.csdnimg.cn/blog_migrate/12ab9d4e5cae5d0195c7dc1d517dd7c2.png)
Append
append函数可以简单实现数据拼接的效果,相比concat效果较为单一,
data = dtName01.append(dtName02)
![](https://i-blog.csdnimg.cn/blog_migrate/700dd689555e9690f68603bf9a5ba611.png)
agg
agg函数是常用的聚合函数,常与下面的groupby函数搭配使用,使用agg函数可以非常方便地实现对聚合后的数据进行sum,max,min,mean,std等函数方法的统计
import pandas as pd
data = pd.read_csv("test.csv")
data = data.iloc[:,1:6]
dt1 = data.groupby("MSZoning").agg({'LotArea':['sum','max','min','mean','std'],'LotFrontage':['min']})
print(dt1)
data.groupby("MSZoning").agg({'LotArea':['sum','max','min']})
#重命名新的列名
dt2 = data.groupby("MSZoning").agg(房屋大小=('LotArea',max))
print(dt2)
![](https://i-blog.csdnimg.cn/blog_migrate/8d6423062b9f4e1ac4da5072cf245409.png)
groupby
分组函数,可以实现数据分组聚合统计(本质是将dataframe按条件切分为多个小块),将数据全部统计到一个部分,支持多个聚合条件
import pandas as pd
data = pd.read_csv("test.csv")
data = data.iloc[:,1:6]
print(data)
#分组并统计,按分析MSZoning,Street两列聚合分析
dt1 = data.groupby(["MSZoning","Street"])
print(dt1)
![](https://i-blog.csdnimg.cn/blog_migrate/56e0ba1793d48ef380372b5cca66da5d.png)
pipe
pipe是pandas常用的管道函数,可以非常便捷地实现链式编程,允许传递一个函数和零或多个参数,经过函数处理后的任意类型和形式的数据。
import pandas as pd
data = pd.read_csv("test.csv")
data = data.iloc[:,1:6]
print(data)
#所有元素加n
def incr(df,n):
df2=df.apply(lambda x: x+n if x.name=="LotArea" else x,axis=0)
return df2
def decl(df,n):
df2=df.apply(lambda x: x-n if x.name=="LotArea" else x,axis=0)
return df2
#加10再减10
data = data.query("LotArea>100").pipe(incr,10).pipe(decl,10)
print(data.head())
assign
assign函数可以实现在原数据不变的情况下,新增一或者多列,可以指定返回结果,使用起来也是较为方便的。
import pandas as pd
data = pd.read_csv("test.csv")
data = data.iloc[:,1:6]
data = data.assign(sale_num = (data["LotArea"]*20-data["LotArea"]*10))
print(data)
![](https://i-blog.csdnimg.cn/blog_migrate/53f02a64193e31678fdff7948fc714ce.png)
总结
pandas是一个非常丰富的科学库,这里只是简单介绍一下,如果有兴趣的话,后续可以去官网学习一下。