版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
大數(shù)據(jù)分析:基于Python
第6章Pandas余本國Pandas是python中基于NumPy的數(shù)據(jù)分析工具,是一個強大的分析結(jié)構(gòu)化數(shù)據(jù)的工具集。Pandas提供的數(shù)據(jù)結(jié)構(gòu)具有處理數(shù)據(jù)靈活、速度快、富有表現(xiàn)力的特點,使得數(shù)據(jù)分析更加高效強大,因而廣泛應(yīng)用于金融、統(tǒng)計學(xué)、學(xué)術(shù)研究、工程等領(lǐng)域。Anaconda平臺默認已經(jīng)安裝了Pandas庫,用戶可以直接導(dǎo)入使用。常用的Pandas庫導(dǎo)入命令為:importpandasaspd
Pandas常用的有Series和DataFrame兩2種數(shù)據(jù)結(jié)構(gòu)。6.1Series數(shù)據(jù)結(jié)構(gòu)Series是帶標(biāo)簽(索引)的一維數(shù)組,DataFrame則是帶標(biāo)簽的二維表格數(shù)據(jù)結(jié)構(gòu),類似于Excel的表格。6.1.1Series的創(chuàng)建Series是一維數(shù)組序列,也稱為序列,存儲一行或一列數(shù)據(jù)。它由一組數(shù)據(jù)和相應(yīng)的數(shù)據(jù)標(biāo)簽組成,數(shù)據(jù)標(biāo)簽也稱為索引(index)。Series類似于NumPy中帶標(biāo)簽的一維數(shù)組,不同的是該標(biāo)簽是“顯性”的,但Series的索引不局限于整數(shù),還可以自定義為字符串,如a、b、c、d,甚至是first、second、third等等,其默認的索引是從0開始的自然數(shù)。使用索引可以非常方便地在Series序列中取值。(1)創(chuàng)建SeriesSeries對象使用pd.Series()函數(shù)創(chuàng)建,使用方式如下:pd.Series(data,index,dtype)其中:data:序列數(shù)據(jù),可以是list、dict或NumPy中一維ndarray數(shù)組。index:序列索引(標(biāo)簽),可以用列表表示,默認為從0開始按1自動遞增的整數(shù)索引。dtype:序列的數(shù)據(jù)類型,默認根據(jù)data中的數(shù)據(jù)自動設(shè)置。例如,分別通過list、dict和一維ndarray數(shù)組創(chuàng)建Series對象。In[1]:importnumpyasnp...:importpandasaspd...:#直接給定列表創(chuàng)建序列series1...:series1=pd.Series([45,12,56,24,35],...:['a','b','c','d','e'])...:series1Out[1]:a45b12c56d24e35dtype:int64
In[2]:lis=[60.5,1620,447,2890,345,1800,1970,37.8]...:elem=['Ca','K','Fe','Cl','P','S','Na','Mg']...:bld=pd.Series(lis,elem)#通過列表list1創(chuàng)建序列blood...:bldOut[2]:Ca60.5K1620.0Fe447.0Cl2890.0P345.0S1800.0Na1970.0Mg37.8dtype:float64In[3]:narr1=np.array(['father','mother','brother','sister’,...:'son','daughter'])...:cn=pd.Series(narr1)#通過數(shù)組narr1創(chuàng)建序列callname...:cnOut[3]:0father1mother2brother3sister4son5daughterdtype:object
In[4]:dict1={'orange':4.0,'pear':3.5,'apple':6,'grape':12.5}...:#通過字典dict1創(chuàng)建序列price,索引為字典的鍵...:price=pd.Series(dict1)...:priceOut[4]:orange4.0pear3.5apple6.0grape12.5dtype:float64In[1]:importpandasaspd...:L_1=['aa','bb','cc','dd','ee']...:s1=pd.Series(L_1)...:s1Out[1]:0aa1bb2cc3dd4eedtype:object
In[2]:s1[3]Out[2]:'dd'
6.1.2訪問Series
Series對象也可以通過其所在的位置、對應(yīng)的標(biāo)簽(索引)進行訪問,還可以進行切片和按條件篩選訪問。In[3]:s2=pd.Series(L_1,index=list("abcde"))...:s2Out[3]:aaabbbcccdddeeedtype:object
In[4]:s2["d"]Out[4]:'dd'訪問的方式同列表的方式,切片也一致。In[5]:s1[:3]Out[5]:0aa1bb2ccdtype:object
In[6]:s1[::2]Out[6]:0aa2cc4eedtype:object
In[7]:s1[::-1]Out[7]:4ee3dd2cc1bb0aadtype:object6.1.3Series基本操作
Series對象支持元素增刪和修改、索引重建和排序等操作。1.增加元素Series對象可以直接使用標(biāo)簽和索引添加元素,也可以使用concat()方法合并兩個序列。In[8]:s1#查看序列s1Out[8]:0aa1bb2cc3dd4eedtype:object
In[9]:s1[2]="c2"#修改序列索引號為2的元素值為c2
In[10]:s1#再次查看s1,索引號為2的位置值元素改為了c2Out[10]:0aa1bb2c23dd4eedtype:objectIn[11]:s1[5]="ff"#當(dāng)索引號不存在時,則為增加該元素
In[12]:s1#再次查看,發(fā)現(xiàn)增加了原索引號不存在的元素ffOut[12]:0aa1bb2c23dd4ee5ffdtype:object修改和增加類似于字典,當(dāng)標(biāo)簽存在時則是修改,當(dāng)不存在時則是增加。In[13]:s2=pd.Series(L_1,index=list("abcde"))#創(chuàng)建s2序列...:s2Out[13]:aaabbbcccdddeeedtype:objectIn[14]:pd.concat([s1,s2])Out[14]:0aa1bb2c23dd4ee5ffaaabbbcccdddeeedtype:object注意,合并后并未改變s1,而是做成了一個新的序列。2.重新索引上面的合并結(jié)果中的標(biāo)簽(索引)比較亂,有數(shù)字有字母,現(xiàn)需要對標(biāo)簽進行修改,全部修改為數(shù)字標(biāo)簽,方法為直接給Series的標(biāo)簽賦值。In[16]:importpandasaspd...:...:data={'A':10,'B':20,'C':30}...:s=pd.Series(data)...:sOut[16]:A10B20C30dtype:int64
In[17]:s.indexOut[17]:Index(['A','B','C'],dtype='object')s.index輸出的是序列s的標(biāo)簽,也即索引。顯示結(jié)果表示該標(biāo)簽為['A','B','C']。所以可以直接對索引s.index賦值即可修改。In[18]:s.index=range(len(s))#修改標(biāo)簽為默認數(shù)字標(biāo)簽...:sOut[18]:010120230dtype:int64In[19]:s1_s2=pd.concat([s1,s2])...:s1_s2.index=range(len(s1_s2))...:s1_s2故對In[14]的結(jié)果修改索引為:Out[19]:0aa1bb2c23dd4ee5ff6aa7bb8cc9dd10eedtype:object3.排序可以使用sort_index()和sort_values()函數(shù)分別對Series序列對象的標(biāo)簽和值進行排序,使用方式如下:sort_index(ascending)sort_values(ascending)其中,ascending參數(shù)用于控制排序的方式,默認為升序。當(dāng)ascending=True時,按升序排序,當(dāng)ascending=False時,降序排序。In[19]:dic={'A':1,'B':5,'C':3}...:s=pd.Series(dic)#創(chuàng)建序列...:sOut[19]:A1B5C3dtype:int64
In[20]:s.sort_index(ascending=False)#按照索引降序排列Out[20]:C3B5A1dtype:int64
In[21]:s.sort_values(ascending=True)
#按照序列值升序排列Out[21]:A1C3B5dtype:int64
In[22]:s#原序列并未被改變Out[22]:A1B5C3dtype:int64注意,排序并不改變原序列,而是生成了新的序列,目的是為了保護原數(shù)據(jù)的安全。In[23]:s.drop("B")#刪除標(biāo)簽為B的元素Out[23]:A1C3dtype:int64
In[24]:s#原序列不改變Out[24]:A1B5C3dtype:int64
In[25]:dels["B"]#刪除標(biāo)簽為B的元素In[26]:s#原序列改變了Out[26]:A1C3dtype:int644.刪除元素使用del命令或drop()方法都可以刪除Series序列對象中的元素,不同的地方在于使用del命令是直接在原始Series序列上操作,而drop()方法則不改變原始Series序列,而是返回一個新的刪除元素后的Series序列。5.Series的長度查看序列的長度,即元素的個數(shù),可以使用len()函數(shù)。In[27]:len(s)Out[27]:2由于上面的s被刪除了標(biāo)簽為B的元素,所以只剩下兩個元素了。6.2DataFrameDataFrame稱為數(shù)據(jù)框,是帶標(biāo)簽(索引)的二維表格數(shù)據(jù)結(jié)構(gòu),存儲多行和多列數(shù)據(jù)集合,由多個Series組成,是Series的容器,其數(shù)據(jù)結(jié)構(gòu)如圖6-1所示。DataFrame的每一行或者每一列都可以看作是一個Series序列對象。DataFrame對象既有行索引(index)也有列索引(column),對象的行、列和每一個元素都可以通過行索引和列索引獲取。有時對數(shù)據(jù)框操進行作時,若是行操作需帶參數(shù)axis=0,列操作時帶參數(shù)axis=1,比如刪除df中的B列,則為df.drop("B",axis=1)。6.2.1創(chuàng)建DataFrame
創(chuàng)建DataFrame對象使用DataFrame()函數(shù),格式方式如下:pd.DataFrame(data,index,columns,dtype)其中:data:數(shù)據(jù)內(nèi)容,可以是二維數(shù)組、series序列、列表、字典、DataFrame對象等。index:DataFrame的行索引,如果沒有指定行索引,默認為從0開始按1自動遞增的整數(shù)索引。columns:DataFrame的列名,即列索引,如果沒有指定列索引,默認為從0開始按1自動遞增的整數(shù)索引。dtype:指定DataFrame的數(shù)據(jù)類型,默認為None,數(shù)據(jù)類型根據(jù)創(chuàng)建DataFrame對象的數(shù)據(jù)內(nèi)容自動設(shè)置。In[1]:importpandasaspd...:dic={'A':[1,2,3],'B':list("abc"),"C":[5,1,3]}...:df=pd.DataFrame(dic)#按字典創(chuàng)建數(shù)據(jù)框...:dfOut[1]:ABC01a512b123c3In[2]:importnumpyasnp...:...:arr=np.random.randint(0,10,(3,4))...:df1=pd.DataFrame(arr,columns=list("ABCD"))#數(shù)組創(chuàng)建數(shù)據(jù)框...:df1Out[2]:ABCD0094617214287856.2.2訪問DataFrame
查看數(shù)據(jù)框的行數(shù)(數(shù)據(jù)條數(shù))跟Series一致,使用len()函數(shù);查看數(shù)據(jù)框的列名用df.columns;提取數(shù)據(jù)框的行索引用df.index;獲取數(shù)據(jù)框的形狀(行列數(shù))用df.shape()。In[3]:len(df)Out[3]:3
In[4]:df.columns#提取列名Out[4]:Index(['A','B','C'],dtype='object')
In[5]:df.index#提取行索引Out[5]:RangeIndex(start=0,stop=3,step=1)In[6]:df.index.tolist()#轉(zhuǎn)化為列表Out[6]:[0,1,2]
In[7]:df.shapeOut[7]:(3,3)iloc[]和loc[]是pandas中常用的兩種索引方式,可以查看數(shù)據(jù)框中的某個元素或某個塊元素,它們的主要區(qū)別在于索引時所用的對象不同。為了方便描述,這里做一個約定,當(dāng)行索引index為自定義的類型時,如a、b、c或標(biāo)簽不是從0開始的,如1,2,3等,我們稱之為“標(biāo)簽”。iloc[]通過行號和列號來進行索引,它使用整數(shù)位置來確定位置。這意味著給定的索引可以是整數(shù)或整數(shù)列表、數(shù)組等。loc[]通過行標(biāo)簽或列標(biāo)簽來進行索引,它使用標(biāo)簽名字來確定位置。這意味著給定的索引必須是行或列的標(biāo)簽。df.iloc[]格式為:df.iloc[m:n,p:q]其中:m、n為行索引;p、q為列索引df.loc[]格式為:df.loc[M:N,P:Q]其中:M:N為行標(biāo)簽,P:Q為列標(biāo)簽In[1]:importnumpyasnp...:importpandasaspd...:arr=np.random.randint(0,10,(3,4))...:df1=pd.DataFrame(arr,columns=list("ABCD"))...:df1Out[1]:ABCD034961294428580
In[2]:df1.iloc[:2,1:3]Out[2]:BC049194In[3]:df1.loc[1:2,"B"]Out[3]:1925Name:B,dtype:int32
In[4]:df1.loc[:2,"A":"C"]#提取A到C列Out[4]:ABC034912942858
In[5]:df1.loc[:2,["A","C"]]#按給定的列名(做成了列表)提取Out[5]:AC039124288
In[6]:df1.iloc[1]#提取行索引為1的行Out[6]:A2B9C4D4Name:1,dtype:int32
In[7]:df1.loc[2]#提取行標(biāo)簽為2的行Out[7]:A8B5C8D0Name:2,dtype:int32注意上面代碼中的"A":"C"和["A","C"]提取的結(jié)果差異。提取整行和整列如下。In[8]:df2=pd.DataFrame(arr,columns=list("ABCD"),index=list("abc"))...:df2Out[8]:ABCDa3496b2944c8580
In[9]:df2.loc["c"]#按編號提取c行Out[9]:A8B5C8D0Name:c,dtype:int32
In[10]:df2.iloc[1]#按索引號提取b行Out[10]:A2B9C4D4Name:b,dtype:int32
In[11]:df2["B"]#提取B列Out[11]:a4b9c5Name:B,dtype:int32In[13]:df2.head(2)#查看df2的前2行數(shù)據(jù)Out[13]:ABCDa3496b2944
In[14]:df2.tail(2)#查看df2的末尾2行數(shù)據(jù)Out[14]:ABCDb2944c8580提取列時,直接在數(shù)據(jù)框后跟列名,如df["列名"],也可以寫成df.列名。In[12]:df2.BOut[12]:a4b9c5Name:B,dtype:int32有時為了方便查閱數(shù)據(jù)框的開頭部分和結(jié)尾部分,可以使用head()和tail()函數(shù)。head()和tail()函數(shù)默認是查看5行數(shù)據(jù)。6.2.3條件篩選
選取DataFrame中的數(shù)據(jù)除了使用索引和切片,還可以根據(jù)條件篩選滿足條件的數(shù)據(jù)。根據(jù)一定的條件,對數(shù)據(jù)進行提取。dataframe[condition]其中condition是過濾條件,返回值是DataFrame。常用的condition類型:
比較運算:==、<、>、>=、<=、!=,如:df[df.column_A>1000)];
范圍運算:between(left,right),如:df[df.column_A.between(100,1000)];
空置運算:pandas.isnull(column),如:df[df.title.isnull()];
字符匹配:str.contains(patten,na=False),如:df[df.title.str.contains(‘電臺’,na=False)]
邏輯運算:&(與),|(或),~(取反);如:df[(df.column_A>=100)&(df.column_A<=1000)]與df[df.column_A.between(100,1000)]等價。In[1]:importnumpyasnp...:importpandasaspd...:np.random.seed(20231005)#隨機種子,保證每次取隨機數(shù)相同...:arr=np.random.randint(0,50,(4,3))#產(chǎn)生隨機的數(shù)組...:df3=pd.DataFrame(arr,columns=list("ABC"),index=list("abcd"))...:df3Out[1]:ABCa44641b481338c384729d463538
In[2]:df3.B.between(10,40)#選出B列位于10和40之間的數(shù)據(jù),返回邏輯值Out[2]:aFalsebTruecFalsedTrueName:B,dtype:bool
In[3]:df3[df3.B.between(10,40)]#篩選出符合條件的數(shù)據(jù)行Out[3]:ABCb481338d463538In[4]:df3[~df3.B.between(10,40)]#篩選出介于10到40之間以外的數(shù)據(jù)行Out[4]:ABCa44641c384729
In[5]:df3[~(df3.C>40)]#選出C列中>40的數(shù)據(jù)并取反Out[5]:ABCb481338c384729d463538df3.B.between(10,40)選出B列中位于10和40之間的數(shù)據(jù)值,返回的是邏輯值,邏輯真假均返回,見Out[2],故沒有起到篩選出需要的數(shù)據(jù)。邏輯值可以作為索引,所以可以將選出的結(jié)果作為索引進行提取,df3[df3.B.between(10,40)]的作用就是利用邏輯值篩選出符合條件的數(shù)據(jù)行,見Out[3]。6.2.4增刪改數(shù)據(jù)
數(shù)據(jù)的增刪改是數(shù)據(jù)處理的基本操作,DataFrame的增刪改操作方法豐富,靈活多樣。1.增加行列數(shù)據(jù)對于增加列方法簡單,直接在數(shù)據(jù)框?qū)ο蠛笤黾恿忻x值列數(shù)據(jù)即可。df["列名"]=column_dataIn[6]:df3["D"]=range(len(df3["B"]))
In[7]:df3Out[7]:ABCDa446410b4813381c3847292d4635383len(df3["B"])表示提取df3中B列的行數(shù),range(len(df3["B"]))表示產(chǎn)生B列行數(shù)個數(shù)據(jù),這樣做成跟B列一樣長度的個數(shù)數(shù)據(jù)做成新的D列數(shù)據(jù),即df3["D"]=range(len(df3["B"]))。注意:如果列名D存在,則D列原數(shù)據(jù)將被覆蓋,若D列不存在則表示新增列,并且新增作為最后一列??梢允褂胕nsert()函數(shù)增加列,使用方式如下:df.insert(loc,column,value,allow_duplicates=False)其中:loc:整數(shù)類型,表示新增的列位于數(shù)據(jù)框中的位置。column:新增加列的索引名。value:增加列的值,可以是數(shù)字、數(shù)組、series序列等。allow_duplicates:是否允許列名重復(fù),True表示允許新的列名與已存在的列名重復(fù)。In[8]:df3.insert(1,"D2",[0,1,2,3])...:df3Out[8]:AD2BCDa4046410b48113381c38247292d46335383合并兩個數(shù)據(jù)框可以使用concat()函數(shù)。concat()函數(shù)用于將多個數(shù)據(jù)結(jié)構(gòu)(例如Series、DataFrame)水平或垂直堆疊在一起的方法。其基本語法如下:pandas.concat(objs,axis=0,join='inner',ignore_index=False,**kwargs)參數(shù)說明:objs:要連接的對象序列,可以是Series、DataFrame。axis:連接軸,默認為0(垂直疊加),1(水平連接)。join:連接方式,默認為'inner',也可以是'outer'。ignore_index:是否重置索引,默認為False,當(dāng)設(shè)置為True時,返回的DataFrame的索引將重新排序。In[9]:d={'A':11,'D2':12,'B':13,'C':14,'D':15}...:d0=pd.DataFrame(d,index=[0])...:pd.concat([df3,d0],ignore_index=True)#生成一個新的數(shù)據(jù)框Out[9]:AD2BCD0404641014811338123824729234633538341112131415請注意,用字典做成數(shù)據(jù)框時,當(dāng)字典的鍵值不是列表或者元組而是數(shù)值型或者字符型時,需要給出index。In[10]:w=[1,2,3,4,5]...:df3.loc[4]=w#在原數(shù)據(jù)框上增加行
In[11]:df3Out[11]:AD2BCDa4046410b48113381c38247292d46335383412345增加一行也可以使用loc[]的方式,例如增加標(biāo)簽為4增加數(shù)據(jù)為列表[1,2,3,4,5]。2.刪除數(shù)據(jù)使用drop()函數(shù)可以刪除DataFrame中的數(shù)據(jù),使用方式如下:df.drop(標(biāo)簽,axis,inplace)其中:標(biāo)簽:表示待刪除的行索引名或列名。axis:axis=0表示刪除行,axis=1表示刪除列,默認為0刪除行。inplace:布爾值,表示操作是否對原數(shù)據(jù)生效,默認為False,表示不修改原數(shù)據(jù),返回的是一個原數(shù)據(jù)的復(fù)制,若設(shè)置inplace=True,則直接修改原數(shù)據(jù)。In[12]:df3.drop(4,inplace=True)#在數(shù)據(jù)框上直接刪除行標(biāo)簽為4的行
In[13]:df3Out[13]:AD2BCDa4046410b48113381c38247292d46335383
In[14]:df3.drop("D2",axis=1)#刪除列D2并生成新的數(shù)據(jù)框Out[14]:ABCDa446410b4813381c3847292d4635383In[15]:df3.drop(["D2","D"],axis=1,inplace=True)#在原數(shù)據(jù)框上刪除D2和D列
In[16]:df3Out[16]:ABCa44641b481338c384729d4635383.修改數(shù)據(jù)對于DataFrame中的數(shù)據(jù),可以根據(jù)需求修改某一個值、修改某一列、替換單個或多個值等。修改數(shù)據(jù)可以理解為賦值覆蓋,所以可以使用iloc[]或者loc[]方法對已有的值直接賦值覆蓋,以達到修改的目的。若替換單個和多個值也可以使用replace()函數(shù),使用方式為:df.replace(old_value,new_value,inplace)
其中:old_value:需要替換的值,需要同時替換多個值時,使用字典數(shù)據(jù)即可。New_value:替換后的值。inplace:布爾值,表示操作是否對原數(shù)據(jù)生效,默認為False,表示不修改原數(shù)據(jù),返回的是一個原數(shù)據(jù)的復(fù)制,若設(shè)置inplace=True,則直接修改原數(shù)據(jù)。In[17]:df3.loc["c","B"]=0#將df3中c行B列交叉位置上數(shù)據(jù)修改為0
In[18]:df3#原數(shù)據(jù)框被修改Out[18]:ABCa44641b481338c38029d463538In[19]:df3["A"]=[0,1,2,3]#修改df3的A列...:df3Out[19]:ABCa04641b11338c2029d33538
In[20]:df3.loc["d"]=[2,3,0]#修改df3的d行...:df3Out[20]:ABCa04641b11338c2029d230
In[21]:df3.replace(0,99,inplace=True)#將df3中的所有0修改為99
In[22]:df3Out[22]:ABCa994641b11338c29929d2399
In[23]:df3.replace({1:88,2:77})#將df3中所有的1換成88,2換成77Out[23]:ABCa994641b881338c779929d773996.2.5排序
數(shù)據(jù)框的排序分為兩類,一是對標(biāo)簽索引的排序,另一個是針對某行某列值的排序。標(biāo)簽索引排序:sort_index(axis,ascending,inplace)行列的值排序:sort_values(by,axis,ascending,inplace)其中:axis:控制排序的軸方向,axis=0按行排序,axis=1按列排序,默認為0。ascending:默認為True,升序;等于False時按降序排序。by:按指定關(guān)鍵字排序,由行索引名或列索引名組成的列表。In[24]:df3Out[24]:ABCa994641b11338c29929d2399
In[25]:df3.sort_index(axis=0,ascending=False)#按行索引降序排Out[25]:ABCd2399c29929b11338a994641In[26]:df3.sort_values(by="B")#按照B列升序排Out[26]:ABCd2399b11338a994641c299296.2.5索引重置
將行索引設(shè)置為默認的從0開始自然數(shù)索引,或者替換成數(shù)據(jù)框中的某列或其他列表、序列為索引。常用的有reset_index()和set_index()等方式。reset_index()用于替換數(shù)據(jù)框中的行索引為默認的從0開始自然數(shù)索引。reset_index(drop,inplace)參數(shù)說明:drop:表示是否刪除原索引,默認為False,即保留原索引做成個一列存在。inplace:表示是否在原數(shù)據(jù)框上操作,默認False,生成一個新的數(shù)據(jù)框。
In[27]:df3.reset_index()#直接換成默認的索引,原索引保存為一列Out[27]:
indexABC0a9946411b113382c299293d2399
In[28]:df3.reset_index(drop=True,inplace=False)#啟用了drop參數(shù)為TrueOut[28]:ABC099464111133822992932399set_index()用于將數(shù)據(jù)框中的某列替換為行索引。set_index(keys,drop=True,append=False,inplace=False)參數(shù)說明:keys:列標(biāo)簽或列標(biāo)簽的列表,將被用作新索引。drop:布爾值,默認為True。如果為True,則設(shè)置新索引后,原索引列將從DataFrame中刪除。如果為False,則原索引列將保留為DataFrame的一個普通列。append:布爾值,默認為False。如果為True,則將新的列添加到現(xiàn)有索引中,形成多重索引。inplace:布爾值,默認為False。如果為True,則修改原DataFrame,否則返回一個新的DataFrame。In[29]:df3.set_index("B")
#將原數(shù)據(jù)框中的B列設(shè)置為新的索引Out[29]:ACB46994113138992293299其實也可以直接對df3.index賦值。In[30]:df3.index=[1,2,3,4]
In[31]:df3Out[31]:ABC1994641211338329929423996.3pandas讀存對于一些二維的數(shù)據(jù)表格,如csv、Excel、txt等格式的數(shù)據(jù),如何讀取到pandas中作為數(shù)據(jù)框格式使用呢?反過來,已經(jīng)處理好的數(shù)據(jù)框格式的數(shù)據(jù)又怎么保存起來呢?6.3.1讀取數(shù)據(jù)
1.讀取csv與txt文件CSV(Comma-SeparatedValues,逗號分隔值)是一種純文本格式的文件,用來存儲表格數(shù)據(jù)(數(shù)字和文本)。在CSV文件中,記錄是由字段組成的,字段之間由某種字符或字符串分隔,最常見的是逗號或制表符(\t)。記錄之間則以某種換行符分隔。CSV文件可以由任意數(shù)目的記錄組成,所有記錄都有完全相同的字段序列。在pandas中使用read_csv()函數(shù)將csv或txt文件中的數(shù)據(jù)讀取到DataFrame數(shù)據(jù)結(jié)構(gòu),其使用方式如下:pd.read_csv(filename,sep,header,index_col,nrows,skiprows,encoding)參數(shù)說明:filename:表示要讀取的文件名(或含有路徑的文件名),類型可以是txt、csv。sep:指定數(shù)據(jù)的分隔符,默認為逗號“,”。header:指定將哪一行作為列索引,默認為infer,表示自動識別,當(dāng)header=0時,表示將文件的第一行作為DataFrame數(shù)據(jù)的列索引。index_col:指定列作為行索引,index_col=0表示將第一列作為行索引。nrows:設(shè)置需要讀取數(shù)據(jù)中的前n行數(shù)據(jù)。skiprows:需要跳過的行數(shù)。encoding:設(shè)置文本編碼格式,默認值為“utf-8”,中文系統(tǒng)中ANSI類型的編碼應(yīng)設(shè)置為“gbk”。讀取上文本所示的內(nèi)容數(shù)據(jù)表。csv格式可以用記事本或者excel打開顯示內(nèi)容。In[1]:importpandasaspd...:path_csv=r"d:\OneDrive\出版\2023人大出版社\i_nuc.csv"...:df=pd.read_csv(path_csv)...:df.head()Out[1]:Unnamed:0學(xué)號
班級
姓名性別
英語
體育軍訓(xùn)數(shù)分高代解幾00230802424123080242成龍
男76787740236011230802424423080242周怡
女66917547474422230802425123080242張波
男85817545456033230802424923080242朱浩
男65508072627144230802421923080242封印
女738892614746
In[2]:df=pd.read_csv(path_csv,index_col=0)...:df.tail()Out[2]:
學(xué)號
班級
姓名性別
英語
體育
軍訓(xùn)
數(shù)分高代解幾15230802442123080244林建祥
男72728163907516230802443323080244李大強
男79767778707017230802442823080244李側(cè)通
男64969169607718230802440223080244王慧
女73749370717519230802442223080244李曉亮
男856085727283從上面的兩種讀取方式看,默認的讀取方式會將行索引做成一列,而參數(shù)index_col=0聲明將第一列作為行索引后,則是正常顯示的數(shù)據(jù)表。讀取上所示的txt文本表格內(nèi)容。In[3]:path_txt=r"d:\OneDrive\i_nuc.txt"...:df=pd.read_csv(path_txt,sep="\t",...:index_col=0,encoding="gbk")...:df.head()Out[3]:
學(xué)號
班級
姓名性別
英語
體育
軍訓(xùn)
數(shù)分
高代
解幾0230802424123080242成龍
男7678774023601230802424423080242周怡
女6691754747442230802425123080242張波
男8581754545603230802424923080242朱浩
男6550807262714230802421923080242封印
女738892614746In[4]:pd.read_table(path_txt,index_col=0,encoding="gbk")Out[4]:
學(xué)號
班級
姓名性別
英語
體育
軍訓(xùn)
數(shù)分
高代
解幾0230802424123080242成龍
男7678774023601230802424423080242周怡
女6691754747442230802425123080242張波
男8581754545603230802424923080242朱浩
男6550807262714230802421923080242封印
女7388926147465230802420123080242遲培
男6050897176716230802434723080243李華
女6761846165787230802430723080243陳田
男7679866940698230802432623080243余皓
男6667856561719230802432023080243李嘉
女6209060677710230802434223080243李上初
男76908460666011230802431023080243郭竇
女79678464647912230802443523080244姜毅濤
男7771061737613230802443223080244趙宇
男74748868707114230802444623080244周路
女7680061748015230802442123080244林建祥
男72728163907516230802443323080244李大強
男79767778707017230802442823080244李側(cè)通
男64969169607718230802440223080244王慧
女73749370717519230802442223080244李曉亮
男856085727283可以使用pd.read_table()函數(shù)打開txt文本文件。2.讀取Excel文件Excel是常見的存儲和處理數(shù)據(jù)的軟件,可以使用read_excel()函數(shù)從Excel文件中讀取數(shù)據(jù),其使用方式如下:pd.read_excel(filename,sheet_name,header,shiprows,index_col)參數(shù)說明:filename:表示要導(dǎo)入Excel文件的路徑和文件名,支持xlsx格式。sheet_name:指定Excel文件工作表名稱,默認工作表名為Sheet1。header、shiprows、index_col3個參數(shù)的使用方式與read_csv()函數(shù)相同。例如,讀取如圖6-4所示的Excel文件中的Sheet4表格內(nèi)的數(shù)據(jù)內(nèi)容。In[5]:path_xlsx=r"d:\OneDrive\i_nuc.xlsx"...:df=pd.read_excel(path_xlsx,sheet_name="Sheet4")...:df.head()Out[5]:
學(xué)號
電話IP023080242411.892225e+10221.205.98.55123080242441.352226e+10183.184.226.205223080242511.342226e+10221.205.98.55323080242491.882226e+10222.31.51.200423080242191.892225e+10120.207.64.3注意:當(dāng)前的版本號支持xlsx格式,對于早期的Excel的xls格式需安裝xlrd模塊。6.3.2保存數(shù)據(jù)
1.保存為Excel文件使用to_excel()方法可將DataFrame對象數(shù)據(jù)寫入Excel文件中,其使用方式如下:df.to_excel(filename,sheet_name,columns,index)參數(shù)說明:filename:表示要導(dǎo)出為Excel文件的文件名(可含路徑),支持xlsx格式。sheet_name:指定Excel文件工作表名稱,默認工作表名為Sheet1。columns:指定寫入文件的列,為列表,默認為None,表示寫入所有列。index:表示是否將行索引寫入文件,默認為為True,表示寫入。例如,上節(jié)的df可以保存為Excel,文件名為1.xlsx。In[6]:df.to_excel("c:/Users/yubg/Desktop/1.xlsx")#保存在桌面上
注意,必須寫全文件擴展名為xlsx。2.保存為csv/txt文件使用to_csv()方法將DataFrame對象的數(shù)據(jù)導(dǎo)出到txt和csv格式的文件中,其使用方式如下:df.to_csv(filename,sep,header,columns,index,encoding)參數(shù)說明:filename:表示要導(dǎo)出為csv或txt的文件名(可含路徑)。sep:指定數(shù)據(jù)的分隔符,默認為逗號“,”。header:表示是否寫入列名,默認為True,表示寫入。columns:指定寫入文件的列,為列表類型,默認為None,表示寫入所有列。index:表示是否將行索引寫入文件,默認為True,表示寫入。encoding:設(shè)置寫入文件的編碼格式。例如,上節(jié)的df可以保存為csv和txt文件。
增加保存編碼格式為gbk后,再打開22.csv文件,其顯示正常,如右圖In[7]:df.to_csv("c:/Users/yubg/Desktop/2.csv")
In[8]:df.to_csv("c:/Users/yubg/Desktop/3.txt")
用Excel和記事本打開2.csv如下,發(fā)現(xiàn)Excel打開后的表格中的中文是亂碼,如圖6-5所示,所以在保存的時候需要用encoding參數(shù)聲明保存編碼格式。In[9]:df.to_csv("c:/Users/yubg/Desktop/22.csv",encoding="gbk")6.4Pandas其他操作
在對數(shù)據(jù)進行清洗時,常用的幾個數(shù)據(jù)框操作:astype():將指定列的數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。apply():將指定的函數(shù)應(yīng)用于指定列的每個元素。map()unique():返回指定列中的唯一值。nunique():返回指定列中不同值的數(shù)量。value_counts():返回指定列中每個唯一值的計數(shù)。isnull():返回指示缺失值的布爾值。rename():重命名指定列的名稱。shift():將指定列中的元素向下或向上移動指定的位置concat():將多個數(shù)據(jù)集沿著行或列方向合并。例如,現(xiàn)有數(shù)據(jù)框中“班級”列數(shù)據(jù)是數(shù)值型,需要將其班級號(班級列數(shù)據(jù)的后兩位)提取出來,這就需要將該數(shù)值型轉(zhuǎn)化為字符型,再從字符串中利用切片提取即可。In[1]:importpandasaspd...:...:path_xlsx=r"d:\OneDrive\i_nuc.xlsx"...:df=pd.read_excel(path_xlsx,sheet_name="Sheet3")...:df.head()Out[1]:
學(xué)號
班級
姓名性別英語體育軍訓(xùn)數(shù)分高代解幾0230802424123080242成龍
男767.87740.023.0601230802424423080242周怡
女669.17547.047.0442230802425123080242張波
男858.17545.045.0603230802424923080242朱浩
男6558072.062.0714230802421923080242封印
女738.89261.047.046
In[2]:df.班級.dtype#查看班級列數(shù)據(jù)類型Out[2]:dtype('int64')
In[3]:bj=df.班級.astype("str").map(lambdax:x[-2:])
In[4]:bjOut[4]:04214224234244254264374384394310421143124313441444154416441744184419442044Name:班級,dtype:objectdf.班級.astype("str")的作用是將班級列拿出來,將其中的每個元素都轉(zhuǎn)化為str字符型,再對該列使用map()對每個元素提取后兩位,這里用到了匿名函數(shù)lambda。其實這里也可以使用apply()。apply()函數(shù)的作用是將一個函數(shù)應(yīng)用到DataFrame或Series的每個元素或行/列上。In[5]:df.班級.apply(lambdax:str(x)[-2:])Out[5]:0421422423424425426437438439431042114312431344144415441644174
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級英語Whatisyourfavorite課件
- 駕考題庫-70歲以上老年人C2駕照年審三力測試題
- 《證券銷戶寶典》課件
- 單位管理制度集粹選集【職工管理篇】十篇
- 2024服務(wù)合同范文(32篇)
- 單位管理制度合并選集【人員管理】
- 單位管理制度范例選集人事管理十篇
- 七年級英語Nationalheroes課件
- 3ds Max動畫制作實戰(zhàn)訓(xùn)練(第3版)教學(xué)教案
- 2024年醫(yī)院個人工作總結(jié)范文
- 甘肅蘭州生物制品研究所筆試題庫
- 2021-2022學(xué)年第二學(xué)期《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)2》學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 國家開放大學(xué)電大本科《工程經(jīng)濟與管理》2023-2024期末試題及答案(試卷代號:1141)
- C4支持學(xué)生創(chuàng)造性學(xué)習(xí)與表達作業(yè)1-設(shè)計方案
- 給水排水管道工程外觀質(zhì)量檢查記錄
- 2022年國家電力公司火力發(fā)電廠勞動定員標(biāo)準(zhǔn)
- 危險化學(xué)品水路運輸安全管理規(guī)定
- 教育中的心理效應(yīng)
- 考古繪圖(課堂PPT)
- PE管熱熔對接施工方案完整
- 全國各地木材平衡含水率年平均值
評論
0/150
提交評論