????Pandas三種數(shù)據(jù)類型
Pandas提供了三種數(shù)據(jù)類型,分別是
Series
、DataFrame
和Panel
。Series用于保存一維數(shù)據(jù),DataFrame用于保存二維數(shù)據(jù),Panel用于保存三維數(shù)據(jù)或者可變維數(shù)據(jù)。平時(shí)的表格處理數(shù)據(jù)分析最常用的數(shù)據(jù)類型是Series
和DataFrame
,Panel較少用到。
??Series數(shù)據(jù)結(jié)構(gòu)
Series本質(zhì)上是一個(gè)含有索引的
一維數(shù)組
,其包含一個(gè)左側(cè)自動(dòng)生成的index和右側(cè)的values值,分別使用s.index
和s.values
進(jìn)行查看。
下面舉個(gè)例子:
下面我們導(dǎo)入數(shù)據(jù):
import pandas as pd
s=pd.read_excel("D:\A_data\Data_Series.xlsx")
s
運(yùn)行結(jié)果如下:
其中,左側(cè)這一列就是索引列,下面我們分別打印s.index和s.values
index返回一個(gè)index對(duì)象,而values返回一個(gè)array。
?? DataFrame數(shù)據(jù)結(jié)構(gòu)
DataFrame(數(shù)據(jù)框)類似于Excel電子表格,也與R語言中DataFrame的數(shù)據(jù)結(jié)構(gòu)類似。
????DataFrame數(shù)據(jù)的選取
????DataFrame的構(gòu)建
import pandas as pd
df=pd.DataFrame({'x':['a','b','c'],'y':[1,2,3],'z':[4,5,6]})
df
????選取多行
方法一:
df.iloc[[0,1],:]
df.iloc[[0,2],:]
方法二:
df.loc[['0','2'],:]
????選取某一列
df.y
df['y']
df.loc[:,['y']]
df.iloc[:,[1]]
????選取多列
方法一:
df.iloc[:,[1,2]]
方法二:
df.loc[:,['x','y']]
方法三:
df[['x','y']]
????單條件過濾
df[df.z>=5]
????多條件過濾
df[(df.z>=4)&(df.z<=5)]
????獲取列名和行名
df.columns #獲取列名
df.index #獲取行名
????觀察DataFrame的內(nèi)容
df.info() #打印屬性信息
df.head()# 查看前五行的數(shù)據(jù)
df.tail()#查看后五行的數(shù)據(jù)
??變量的變換
有時(shí)候,我們需要對(duì)DataFrame某列的每個(gè)元素都進(jìn)行運(yùn)算處理,從而產(chǎn)生并
添加新的列
。
我么可以直接對(duì)DataFrame的列進(jìn)行加減乘除某個(gè)數(shù),產(chǎn)生新的列:
df['z1']=df['z']*2
apply、applymap和map方法都可以向?qū)ο笾械臄?shù)據(jù)傳遞函數(shù),主要區(qū)別如下:
??apply的操作對(duì)象是DataFrame的某一列(axis=1)或者某一行(axis=0)
??applymap的操作對(duì)象是元素極,作用于每個(gè)DataFrame的每個(gè)數(shù)據(jù)
??map的操作對(duì)象也是元素極,但其是對(duì)Series的每個(gè)數(shù)據(jù)調(diào)用一次函數(shù)
使用apply方法,結(jié)合lambda表達(dá)式,可以為原數(shù)據(jù)框添加新的列:
df['z2']=df.apply(lambda x:x['z']*2 if x['z']==4 else x['z'],axis=1)
??表格的拼接
有時(shí)候,我們需要在已有數(shù)據(jù)框的基礎(chǔ)上添加新的行或者列,或者橫向或縱向的表格。此時(shí)我們需要使用pd.concat函數(shù)或者append函數(shù)實(shí)現(xiàn)該功能。
?? 表格的分組操作
DataFrame往往存在某列包含
多個(gè)類別
的數(shù)據(jù),例如上次博客中的經(jīng)典的葡萄酒數(shù)據(jù)集。我們以此為例。
import pandas as pd
file_path="D:\A_data\Data_wine數(shù)據(jù)\wine.xlsx"
df=pd.read_excel(file_path)
df
使用 groupby()函數(shù)進(jìn)行分組操作:
df1=df.groupby('label')
df
分組之后的結(jié)果與原來數(shù)據(jù)一樣,這是因?yàn)樵陬悇e標(biāo)簽‘label’這一列,原來的數(shù)據(jù)就是按照0、1、2三種類別的順序排下來的。
????按照分組求均值、求和
求均值:
df2=df.groupby('label').mean()
df2
當(dāng)然了,也可以只打出我們想要的某一列的均值:
df2=df.groupby('label').ash.mean()
df2
求和:
對(duì)于這個(gè)葡萄酒數(shù)據(jù)集可能求和操作并沒有意義,但在此只是練習(xí):
df2=df.groupby('label').sum()
df2
求方差:
df2=df.groupby('label').std()
df2
??表格的拼接
有時(shí)候,我們需要在已有數(shù)據(jù)框的基礎(chǔ)上添加新的行或者列,或者橫向或縱向的表格。此時(shí)我們需要使用pd.concat函數(shù)或者append函數(shù)實(shí)現(xiàn)該功能。
其中,axis=0表示沿縱軸連接。axis=1表示沿橫軸連接。
下面我們?cè)倥e一個(gè)例子:
(我覺得2020年國賽數(shù)學(xué)建模國賽C題很不錯(cuò))
首先,我們可以看一下,這是一個(gè)多sheet Excel:
而且,sheet2 、sheet3企業(yè)代號(hào)就是sheet1中企業(yè)的所有發(fā)票信息,也就是說一個(gè)企業(yè)就有很多發(fā)票號(hào)碼。
我們需要整合sheet2,以及sheet3中的信息,將一個(gè)企業(yè)的某一個(gè)指標(biāo)進(jìn)行計(jì)算,然后希望補(bǔ)到heet1中,形成一個(gè)更宏觀的表格。
分析指標(biāo):總進(jìn)項(xiàng)價(jià)稅額:是指企業(yè)在一段時(shí)間內(nèi)購進(jìn)產(chǎn)品的價(jià)值總和,該值越高說明企業(yè)的生產(chǎn)和經(jīng)營規(guī)模就越大,可以作為衡量企業(yè)生產(chǎn)規(guī)模大小的有效指標(biāo)。
我希望根據(jù)sheet2算出這個(gè)指標(biāo),然后添加到sheet1中。
首先導(dǎo)入數(shù)據(jù)。
import pandas as pd
file_path="D:\A_data\Data.2020.C\附件1:123家有信貸記錄企業(yè)的相關(guān)數(shù)據(jù).xlsx"
df=pd.read_excel(file_path,sheet_name=None)
df
這里設(shè)置sheet_name=None,會(huì)將所有的sheet都整合在df中。
將sheet1保存至df1
df1=pd.read_excel(file_path,sheet_name='企業(yè)信息')
df1
將我們所要研究的sheet2即“進(jìn)項(xiàng)發(fā)票信息”保存給df2
df2=pd.read_excel(file_path,sheet_name='進(jìn)項(xiàng)發(fā)票信息')
df2
根據(jù)sheet2計(jì)算總進(jìn)項(xiàng)價(jià)稅額:
df2_=df2.groupby(['企業(yè)代號(hào)'],as_index=False,sort=False)['價(jià)稅合計(jì)'].sum()
df2_
這里注意,設(shè)置參數(shù)sort=False
,不然會(huì)改變企業(yè)代號(hào)的排序。
刪除企業(yè)代號(hào)這一列:
df2_.drop(labels='企業(yè)代號(hào)',axis=1,inplace=False)
參數(shù)說明:axis默認(rèn)為0,指刪除行,axis=1,指刪除列。
inplace=False,默認(rèn)該刪除操作不改變?cè)瓟?shù)據(jù),而是返回一個(gè)執(zhí)行刪除操作后的新DataFrame。inplace=True,則會(huì)直接在原數(shù)據(jù)上進(jìn)行刪除操作,且刪除后無法返回。
????????**由于我拼接表格,添加新的一列,沒有成功。弄出來是這個(gè)樣子的:**??????
所以下面我是導(dǎo)出數(shù)據(jù),形成一個(gè)新的excel,然后利用excel復(fù)制粘貼到sheet1中。
df2__.to_excel("D:\A_data\Data.2020.C\進(jìn)項(xiàng)價(jià)稅合計(jì).xlsx")
文章來源:http://www.zghlxwxcb.cn/news/detail-649714.html
還要繼續(xù)努力呀????????加油加油!文章來源地址http://www.zghlxwxcb.cn/news/detail-649714.html
到了這里,關(guān)于【機(jī)器學(xué)習(xí)5】數(shù)據(jù)處理(二)Pandas:表格處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!