版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章Pandas數(shù)據(jù)分析第4章NumPy數(shù)據(jù)分析Pandas數(shù)組結(jié)構(gòu)Pandas數(shù)據(jù)分析基礎(chǔ)Pandas常用操作Pandas高級(jí)操作Pandas缺失值處理Pandas數(shù)據(jù)分組Pandas數(shù)據(jù)合并Pandas時(shí)間序列Pandas透視表與交叉表5.1Pandas簡(jiǎn)介Pandas是基于NumPy數(shù)組構(gòu)建的,因此它在許多NumPy函數(shù)上提供了直接的支持。它還提供了用于對(duì)表格數(shù)據(jù)進(jìn)行操作的數(shù)據(jù)結(jié)構(gòu),例如Series和DataFrame。Pandas提供了許多用于數(shù)據(jù)操作和處理的函數(shù)和方法,例如數(shù)據(jù)過(guò)濾,數(shù)據(jù)清洗,數(shù)據(jù)合并和重塑等。Pandas還提供了用于將數(shù)據(jù)導(dǎo)入和導(dǎo)出不同文件格式的函數(shù),例如CSV,Excel和SQL等。它是Python數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)中最受歡迎和廣泛使用的庫(kù)之一。Pandas是大數(shù)據(jù)分析的重要工具,我們生活中常用的數(shù)據(jù)處理軟件是微軟的Excel,當(dāng)你學(xué)會(huì)pandas時(shí)候,你會(huì)發(fā)現(xiàn)pandas比Excel好用太多了。5.2Pandas庫(kù)安裝與使用5.2.1安裝在cmd命令行窗口輸入以下命令,等待安裝完成即可。pipinstallpandas5.2Pandas庫(kù)安裝與使用5.2.2使用在使用Pandas庫(kù)之前,我們需要先導(dǎo)入Numpy和Pandas庫(kù),代碼如下。一般為了簡(jiǎn)化Pandas庫(kù)的調(diào)用,約定俗成把Pandas簡(jiǎn)化為pd。import
numpy
as
npimport
pandas
as
pd5.3Pandas數(shù)據(jù)結(jié)構(gòu)Pandas中有兩種主要的數(shù)據(jù)結(jié)構(gòu):Series和DataFrame,Series是一維的數(shù)據(jù)結(jié)構(gòu),類(lèi)似于Python中的列表或數(shù)組,而DataFrame則是二維的數(shù)據(jù)結(jié)構(gòu),類(lèi)似于Excel中的表格。Pandas可以讀取多種數(shù)據(jù)格式的文件,包括CSV、Excel、SQL數(shù)據(jù)庫(kù)和JSON等。5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1SeriesSeries(系列、數(shù)列和序列)是一個(gè)帶有標(biāo)簽的一維數(shù)組,由一組數(shù)據(jù)值(value)和一組標(biāo)簽組成,其中標(biāo)簽與數(shù)據(jù)值之間是一一對(duì)應(yīng)的關(guān)系標(biāo)簽數(shù)據(jù)值數(shù)據(jù)類(lèi)型5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(1)創(chuàng)建Series對(duì)象我們可以使用列表,元組,字典、Numpy數(shù)組和標(biāo)量來(lái)創(chuàng)建Series對(duì)象。1)通過(guò)列表創(chuàng)建Series對(duì)象list1=[11,22,33,44]data1=pd.Series(list1)data1輸出結(jié)果:011122233344dtype:int645.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(1)創(chuàng)建Series對(duì)象2)通過(guò)元組創(chuàng)建Series對(duì)象tuple1=(1,2,3,4,5,6)data2=pd.Series(tuple1)data2輸出結(jié)果:011223344556dtype:int645.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(1)創(chuàng)建Series對(duì)象3)通過(guò)字典創(chuàng)建Series對(duì)象dic1={'a':3.2,'b':7.6,'c':12.11,'d':0}data3=pd.Series(dic1)data3輸出結(jié)果:a3.20b7.60c12.11d0.00dtype:float645.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(1)創(chuàng)建Series對(duì)象4)通過(guò)Numpy數(shù)組創(chuàng)建Series對(duì)象num=np.random.randn(4)#創(chuàng)建一個(gè)隨機(jī)數(shù)組index=['a','b','c','d']#直接賦值索引data4=pd.Series(num,index)data4輸出結(jié)果:a-1.774755b-0.947428c1.511671d-0.062458dtype:float645.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(1)創(chuàng)建Series對(duì)象5)通過(guò)標(biāo)量創(chuàng)建Series對(duì)象s=pd.Series(7)ss=pd.Series(7,['a','b','c','d','e'])s輸出結(jié)果:07dtype:int64a7b7c7d7e7dtype:int645.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(2)Series常用屬性屬性說(shuō)明axes以列表的形式返回所有行索引標(biāo)簽。dtype返回對(duì)象的數(shù)據(jù)類(lèi)型。empty返回一個(gè)空的Series對(duì)象。ndim返回輸入數(shù)據(jù)的維度。shapeSeries數(shù)據(jù)維度size返回輸入數(shù)據(jù)的元素?cái)?shù)量。values以ndarray的形式返回Series對(duì)象。index返回一個(gè)RangeIndex對(duì)象,用來(lái)描述索引的取值范圍。5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.1Series(2)Series常用屬性s=pd.Series([1,2,3,4],index=['a','b','c','d'])s.axess.dtypes.emptys.ndims.shapes.sizes.valuess.index輸出結(jié)果:[Index(['a','b','c','d'],dtype='object')]dtype('int64')False1(4,)4array([1,2,3,4],dtype=int64)Index(['a','b','c','d'],dtype='object')5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrameDataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),既有行標(biāo)簽(index),又有列標(biāo)簽(columns)。它也被稱(chēng)異構(gòu)數(shù)據(jù)表,其中異構(gòu)指的是表格中每列的數(shù)據(jù)類(lèi)型可以不同,例如可以是字符串、整型或者浮點(diǎn)型等行標(biāo)簽列標(biāo)簽5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(1)創(chuàng)建DataFrame對(duì)象1)通過(guò)Numpy數(shù)組創(chuàng)建DataFrame對(duì)象date=pd.date_range('today',periods=4)#得到包括今天在內(nèi)的4個(gè)連續(xù)日期num=np.random.randn(4,3)df1=pd.DataFrame(num,index=date,columns=['A','B','C'])df15.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(1)創(chuàng)建DataFrame對(duì)象2)通過(guò)字典數(shù)組創(chuàng)建DataFrame對(duì)象dict={
'name':['張三','李四','王五'],
'age':[22,18,30],
'gender':['girl','girl','boy']}df2=pd.DataFrame(dict)df25.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(1)創(chuàng)建DataFrame對(duì)象3)通過(guò)CSV文件創(chuàng)建DataFrame對(duì)象df3=pd.read_csv('data/北京積分落戶(hù)數(shù)據(jù).csv',index_col='id')#用作行索引(標(biāo)簽)的列df3輸出結(jié)果: name birthday company scoreid 1 楊x 1972-12 北京利德xxxx 122.592 紀(jì)x 1974-12 北京航天xxxx 121.253 王x 1974-05 品牌聯(lián)盟xxxx 118.964 楊x 1975-07 中科專(zhuān)利xxxx 118.215 張x 1974-11 北京阿里xxxx 117.79... ... ... ... ...6015 孫x 1978-08 華為海洋xxxx 90.756016 劉x 1976-11 福斯(上海)xxxx 90.756017 周x 1977-10 贏創(chuàng)德固xxxx 90.756018 趙x 1979-07 澳科利耳xxxx 90.756019 賀x 1981-06 北京寶潔xxxx 90.756019rows×4columns5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(1)創(chuàng)建DataFrame對(duì)象4)通過(guò)Excel文件創(chuàng)建DataFrame對(duì)象df4=pd.read_excel(
io='data/某藥房2018年銷(xiāo)售數(shù)據(jù).xlsx',
usecols=['購(gòu)藥時(shí)間','社??ㄌ?hào)','商品名稱(chēng)','銷(xiāo)售數(shù)量','應(yīng)收金額','實(shí)收金額'],#需要加載的列,可以使用序號(hào)或者列名。
skiprows=lambda
x:x>0
and
random.random()>0.1
#skiprows:通過(guò)行號(hào)、索引或函數(shù)指定需要跳過(guò)的行。)df45.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(1)創(chuàng)建DataFrame對(duì)象4)通過(guò)Excel文件創(chuàng)建DataFrame對(duì)象5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(2)DataFrame常用屬性和方法:名稱(chēng)說(shuō)明T行和列轉(zhuǎn)置axes返回一個(gè)僅以行軸標(biāo)簽和列軸標(biāo)簽為成員的列表dtypes返回每列數(shù)據(jù)的數(shù)據(jù)類(lèi)型emptyDataFrame中沒(méi)有數(shù)據(jù)或者任意坐標(biāo)軸的長(zhǎng)度為0,則返回Truendim軸的數(shù)量,也指數(shù)組的維數(shù)shape返回一個(gè)元組,表示DataFrame維度sizeDataFrame中的元素?cái)?shù)量values使用numpy數(shù)組表示DataFrame中元素值head()返回前n行數(shù)據(jù)tail()返回后n行數(shù)據(jù)shift()將行或列移動(dòng)指定的步幅長(zhǎng)度5.3Pandas數(shù)據(jù)結(jié)構(gòu)5.3.2DataFrame(2)DataFrame常用屬性和方法:df=pd.DataFrame({'姓名':['王二','張三'],
'性別':['女性','女性'],
'班級(jí)':[1,2],
'身高':[161,160]})df.Tdf.axesdf.dtypesdf.emptydf.ndimdf.shapedf.sizedf.valuesdf.head()#默認(rèn)返回前5條數(shù)據(jù)df.tail()#默認(rèn)返回后5條數(shù)據(jù)df.shift()#默認(rèn)值是1,1表示移動(dòng)一次,注意這里移動(dòng)的都是數(shù)據(jù),而索引是不移動(dòng)的,移動(dòng)之后沒(méi)有對(duì)應(yīng)值的,就賦值為NaN。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.1數(shù)據(jù)讀取與保存Pandas將數(shù)據(jù)加載到DataFrame后,就可以使用DataFrame對(duì)象的屬性和方法進(jìn)行操作。Pandas幾乎支持市面上所有的主流數(shù)據(jù)存儲(chǔ)形式,例如Excel、CSV,以及各種數(shù)據(jù)庫(kù)等格式文件格式讀取函數(shù)寫(xiě)入函數(shù)binaryExcelread_excelto_exceltextCSVread_csv、read_tableto_csvtextJSONread_jsonto_jsontext網(wǎng)頁(yè)HTML表格read_htmlto_htmltext本地剪貼板read_clipboardto_clipboardSQLSQL查詢(xún)數(shù)據(jù)庫(kù)read_sqlto_sqltextMarkdown
to_markdown5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.1數(shù)據(jù)讀取與保存(1)數(shù)據(jù)讀取pd.read_csv(my_file.csv,sep=;,encoding=utf-8,nrows=1000,skiprows=[2,5])#讀取函數(shù)一般會(huì)賦值給一個(gè)變量df1=pd.read_excel('data/互聯(lián)網(wǎng)公司股票.xlsx')
#讀取指定目錄中的Excel文件,默認(rèn)讀取第一個(gè)標(biāo)簽頁(yè)Sheetdf2=pd.read_csv('data/北京積分落戶(hù)數(shù)據(jù).csv')
#讀取指定目錄中的csv文件df3=pd.read_csv('/file/data/dataset/GDP-China.csv')#使用URL5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.1數(shù)據(jù)讀取與保存(2)數(shù)據(jù)保存index=None表示將會(huì)以數(shù)據(jù)本來(lái)的樣子寫(xiě)入。如果沒(méi)有寫(xiě)index=None,你會(huì)多出一個(gè)第一列,內(nèi)容是1,2,3,...,一直到最后一行。df1.to_excel('data/股票數(shù)據(jù).xlsx')#保存為Excel文件,可以指定文件目錄路徑df2.to_csv('data/落戶(hù)數(shù)據(jù).csv',index=None)#保存為csv文件,可以指定文件目錄路徑5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.2數(shù)據(jù)的信息對(duì)獲得的數(shù)據(jù)集做一些初步的驗(yàn)證,例如行名、列名是否一致,數(shù)據(jù)量是否有缺失,各列的數(shù)據(jù)類(lèi)型等,以對(duì)數(shù)據(jù)的全貌有所了解。(1)查看樣本df=pd.read_excel('data/互聯(lián)網(wǎng)公司股票.xlsx')df.head(2)
#查看前2條數(shù)據(jù)df.tail(2)
#查看后2條數(shù)據(jù)df.sample(2)#隨機(jī)查看2條數(shù)據(jù)5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.2數(shù)據(jù)的信息(2)數(shù)據(jù)形狀df.shape
#共32行8列(索引不算)df['日期'].shape
#df['日期']為Series輸出結(jié)果:(32,8)(32,)5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.2數(shù)據(jù)的信息(3)基礎(chǔ)信息df.info(verbose=True)
#顯示所有數(shù)據(jù)的類(lèi)型、索引情況、行列數(shù)、各字段數(shù)據(jù)類(lèi)型、內(nèi)存占用等。Series不支持。輸出結(jié)果:<class'pandas.core.frame.DataFrame'>RangeIndex:32entries,0to31Datacolumns(total8columns):#ColumnNon-NullCountDtype----------------------------0日期32non-nullobject1公司32non-nullobject2收盤(pán)32non-nullfloat643開(kāi)盤(pán)32non-nullfloat644高32non-nullfloat645低32non-nullfloat646交易量32non-nullfloat647漲跌幅32non-nullfloat64dtypes:float64(6),object(2)memoryusage:2.1+KB5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.2數(shù)據(jù)的信息(4)數(shù)據(jù)類(lèi)型df.dtypes
#返回每個(gè)字段的數(shù)據(jù)類(lèi)型,以及DataFrame整體的類(lèi)型輸出結(jié)果:日期object公司object收盤(pán)float64開(kāi)盤(pán)float64高float64低float64交易量float64漲跌幅float64dtype:object5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.2數(shù)據(jù)的信息(5)行、列索引內(nèi)容df.axes
#返回一個(gè)行內(nèi)容和列內(nèi)容組成的列表[行索引,列索引]。輸出結(jié)果:[RangeIndex(start=0,stop=32,step=1),Index(['日期','公司','收盤(pán)','開(kāi)盤(pán)','高','低','交易量','漲跌幅'],dtype='object')]5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.3數(shù)據(jù)選擇語(yǔ)法說(shuō)明df[col]選擇列df.loc[label]按索引選擇行df.iloc[col]按數(shù)字索引選擇行df[0:5]使用切片選擇行df[bool_vec]使用表達(dá)式篩選行df=pd.read_excel('data/互聯(lián)網(wǎng)公司股票.xlsx')df['日期']
#'日期'列df.loc[2]
#標(biāo)簽名為2的行df.iloc[0]
#標(biāo)簽索引為0的行df[0:3]
#使用切片選擇行,輸出前3行df[df['公司']=='JD']#先選取名稱(chēng)為JD的公司,然后據(jù)此布爾表達(dá)式選擇行。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.4位置計(jì)算(1)位置移動(dòng)shift()df.head(3).shift(2)
#取出前三行,然后整體下移兩行,最上面的一行為NaNdf.head(3).shift(-1)#整體上移一行,最下面的一行為NaNdf.head(3).shift(3,axis=1)#向右移動(dòng)三位,axis=1表示沿橫向5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.4位置計(jì)算(2)位置差值diff()diff函數(shù)實(shí)現(xiàn)后一行數(shù)據(jù)減去前一行數(shù)據(jù)的差值。df_diff=pd.DataFrame([3.56,3.41,4.43,3.40,1.69],columns=['交易量'])df_diff['交易量_diff']=df_diff['交易量'].diff()df_diff5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.4位置計(jì)算(3)位置序號(hào)rank()rank函數(shù)計(jì)算排名,排名會(huì)從1開(kāi)始一直到數(shù)組中有效數(shù)據(jù)的數(shù)量。rank函數(shù)返回從小到大排序的下標(biāo)。df_rank=pd.DataFrame([3.56,3.41,4.43,3.41,1.69],columns=['交易量'])df_rank['交易量_rank']=df_rank.rank()#默認(rèn)是使用平均值計(jì)算重復(fù)值的排名,即有兩個(gè)重復(fù)值排名是前兩位,那么這兩個(gè)值的排名都是(2+3)/2=2.5df_rank5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算Pandas可以對(duì)Series與DataFrame進(jìn)行快速的描述性統(tǒng)計(jì),例如求和、平均數(shù)、最大值和方差等(1)描述統(tǒng)計(jì)df.describe()#會(huì)返回一個(gè)有多行的所有數(shù)字列的統(tǒng)計(jì)表,每一行對(duì)應(yīng)一個(gè)統(tǒng)計(jì)指標(biāo),有總數(shù)、平均數(shù)、標(biāo)準(zhǔn)差、最小值、四分位數(shù)、最大值等。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算(2)統(tǒng)計(jì)函數(shù)協(xié)方差:只表示線(xiàn)性相關(guān)的方向,取值正無(wú)窮到負(fù)無(wú)窮。1)計(jì)算所有變量之間的協(xié)方差df.cov()#給出協(xié)方差矩陣,一般用于數(shù)值列,返回列與列之間的相關(guān)關(guān)系可以看出,交易量和漲跌幅呈負(fù)相關(guān)(-0.012218),但和其他變量(列)呈正相關(guān)。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算(2)統(tǒng)計(jì)函數(shù)協(xié)方差:只表示線(xiàn)性相關(guān)的方向,取值正無(wú)窮到負(fù)無(wú)窮。1)計(jì)算所有變量之間的協(xié)方差df.cov()#給出協(xié)方差矩陣,一般用于數(shù)值列,返回列與列之間的相關(guān)關(guān)系5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算(2)統(tǒng)計(jì)函數(shù)2)計(jì)算兩個(gè)變量之間的協(xié)方差df['開(kāi)盤(pán)'].cov(df['交易量'])#給出兩個(gè)變量之間的相關(guān)關(guān)系輸出結(jié)果:53.87153074596773
該數(shù)值表明二者為正相關(guān)。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算(2)統(tǒng)計(jì)函數(shù)相關(guān)系數(shù):不僅表示線(xiàn)性相關(guān)的方向,還表示線(xiàn)性相關(guān)的程度,取值[-1,1]。df.corr()#給出相關(guān)性矩陣,一般用于數(shù)值列,返回列與列之間的相關(guān)系數(shù)可以看出,交易量和漲跌幅呈負(fù)相關(guān),和其他變量呈正相關(guān),但相關(guān)度不是很高。5.4Pandas數(shù)據(jù)分析基礎(chǔ)5.4.5統(tǒng)計(jì)計(jì)算(3)非統(tǒng)計(jì)計(jì)算df.all()#返回每一列是否所有元素都為真df.any()#返回每一列任何元素是否為真df.round(2)#
通過(guò)提供整數(shù),每一列都舍入到相同的小數(shù)位數(shù)df.nunique()#獲取唯一值的數(shù)量5.5Pandas常用操作5.5.1apply函數(shù)apply函數(shù)可以將每行或者每列的數(shù)據(jù),放到某個(gè)函數(shù)中進(jìn)行處理。df=pd.DataFrame(np.random.randint(10,size=(3,4)))dfdf.apply(lambda
x:x.max())#apply默認(rèn)的axis參數(shù)(軸)是等于0,也就是代表列,匿名函數(shù)求每一列的最大值。df.apply(lambda
x:x.max(),axis=1)#axis=1表示匿名函數(shù)求每一行的最大值5.5Pandas常用操作5.5.2applymap函數(shù)apply可以一次性處理行和列的數(shù)據(jù),而如果想要批量處理DataFrame的所有數(shù)據(jù)。df=pd.DataFrame(np.random.randint(10,size=(3,4)))dfdf.applymap(lambda
x:x*2)#通過(guò)匿名函數(shù)給每個(gè)數(shù)都乘以25.5Pandas常用操作5.5.3排序排序主要分為兩方面:按照某個(gè)列排序、按照索引排序。(1)按照列排序按照列進(jìn)行排序通過(guò)sort_values來(lái)實(shí)現(xiàn),參數(shù)ascending用來(lái)指定排序方法。df=pd.DataFrame(np.random.randint(10,size=(3,4)))dfdf.sort_values(by=[0],ascending=False)#通過(guò)by=[0],指定對(duì)第0列按照降序排序5.5Pandas常用操作5.5.3排序排序主要分為兩方面:按照某個(gè)列排序、按照索引排序。(1)按照索引排序按照索引排序通過(guò)sort_index來(lái)實(shí)現(xiàn),用法與sort_values類(lèi)似。但是因?yàn)樗饕挥幸涣校虼瞬恍枰~外指定排序的字段。df=pd.DataFrame(np.random.randint(10,size=(3,4)))dfdf.sort_index(ascending=False)#僅對(duì)索引進(jìn)行降序排序,不需要額外指定字段5.5Pandas常用操作5.5.4邏輯運(yùn)算在Pandas中,可以使用邏輯運(yùn)算符進(jìn)行數(shù)據(jù)篩選和過(guò)濾。類(lèi)別運(yùn)算符或函數(shù)一般邏輯運(yùn)算>
>=
<
<=
==
!=復(fù)合邏輯運(yùn)算&
|
~邏輯運(yùn)算函數(shù)query()、isin()、between()5.5Pandas常用操作5.5.4邏輯運(yùn)算(1)篩選出“普茶銷(xiāo)量大于等于60并且清涼茶銷(xiāo)量大于等于70”的記錄df=pd.read_csv('data/products_sales.csv')
#讀取指定目錄中的csv文件df
#打印產(chǎn)品銷(xiāo)量表(df["普茶"]>=60)&(df["清涼茶"]>=70)
#篩選條件df[(df["普茶"]>=60)&(df["清涼茶"]>=70)]
#再利用條件篩選出記錄5.5Pandas常用操作5.5.4邏輯運(yùn)算(1)篩選出“普茶銷(xiāo)量大于等于60并且清涼茶銷(xiāo)量大于等于70”的記錄5.6Pandas高級(jí)操作5.6.1替換操作替換操作可以同步作用于Series和DataFrame中。替換方法為replace。替換操作包括單值替換和多指替換兩種方式:(1)單值替換普通替換:替換所有符合要求的元素,to_replace=15,value='e'。 按列指定單值替換:to_replace={列標(biāo)簽:替換值},value='value’。(2)多值替換列表替換:替換列表中所有元素,to_replace=[],value=[]。字典替換(推薦),to_replace={to_replace:value,to_replace:value}。5.6Pandas高級(jí)操作5.6.1替換操作df=pd.DataFrame(np.random.randint(0,100,size=(5,6)))#創(chuàng)建一個(gè)5行6列的數(shù)據(jù)df5.6Pandas高級(jí)操作5.6.2單值替換(1)普通替換將列表中的4替換成four。df.replace(to_replace=71,value='four')5.6Pandas高級(jí)操作5.6.2單值替換(1)普通替換有一點(diǎn)要注意,如果新值的數(shù)據(jù)類(lèi)型發(fā)生變化,那么整個(gè)列的數(shù)據(jù)類(lèi)型都會(huì)改變。df.replace(to_replace=4,value='four').info()5.6Pandas高級(jí)操作5.6.2單值替換(2)指定列替換如果我們只想替換某一列中的72,可以通過(guò)字典指定列替換。其中,字典的鍵為要替換的數(shù)據(jù)所在列,值為要替換的數(shù)據(jù)。這樣只有第二列中的99被修改了,第一列的99仍然存在。df.replace(to_replace={2:99},value=777)5.6Pandas高級(jí)操作5.6.3多值替換有時(shí)候,我們要替換很多數(shù)據(jù)。如果一個(gè)一個(gè)替換,就有些麻煩。這時(shí),我們可以通過(guò)多值替換,批量完成替換操作。(1)列表替換把多個(gè)替換的舊值與新值分別以列表的形式傳給to_replace和value參數(shù),要注意舊值與新值要一一對(duì)應(yīng)。df.replace(to_replace=[3,7],value=['three','seven'])5.6Pandas高級(jí)操作5.6.3多值替換有時(shí)候,我們要替換很多數(shù)據(jù)。如果一個(gè)一個(gè)替換,就有些麻煩。這時(shí),我們可以通過(guò)多值替換,批量完成替換操作。(1)列表替換數(shù)據(jù)中的3就替換成了three,7替換成了seven。df.replace(to_replace=[3,7],value=['three','seven'])5.6Pandas高級(jí)操作5.6.3多值替換(2)字典替換(推薦)列標(biāo)替換雖然可以實(shí)現(xiàn)多值替換,但是看起來(lái)并不直觀(guān),可讀性不高。我們可以將舊值與新值以字典的鍵值對(duì)形式,傳給to_replace。df.replace(to_replace={10:'廣西',20:'桂林'})5.6Pandas高級(jí)操作5.6.4映射操作映射操作的概念是:創(chuàng)建一個(gè)映射關(guān)系列表,把values元素和一個(gè)特定的標(biāo)簽或者字符串綁定(給一個(gè)元素值提供不同的表現(xiàn)形式)。map只是Serise的函數(shù),只能由Series調(diào)用。dic={
'name':['張三','李四','張三'],
'salary':[15000,20000,15000],}df=pd.DataFrame(data=dic)df5.6Pandas高級(jí)操作5.6.4映射操作用字典創(chuàng)建一個(gè)映射關(guān)系表,制定映射的對(duì)照關(guān)系。通過(guò)這個(gè)映射關(guān)系,就可以實(shí)現(xiàn)映射。實(shí)際上,map就是將原數(shù)據(jù)中的內(nèi)容,用字典的鍵對(duì)應(yīng)的值替換掉了。map_dic={
'張三':'Tom',
'李四':'Jerry',}df['nickname']=df['name'].map(map_dic)df5.6Pandas高級(jí)操作5.6.5運(yùn)算工具(1)Series的map方法假設(shè)有這樣一個(gè)需求:假定超過(guò)3000部分的錢(qián)需要繳納50%的稅,計(jì)算每個(gè)人的稅后薪資。def
after_tax(salary):
if
salary>3000:
salary-=(salary-3000)*0.5
return
salarydf['after_tax']=df['salary'].map(after_tax)df5.6Pandas高級(jí)操作5.6.5運(yùn)算工具(2)DataFrame中的apply操作apply是DataFrame的中運(yùn)算工具,將運(yùn)算作用到DataFrame的行或者列中。df=pd.DataFrame(np.random.randint(0,100,size=(5,3)))#創(chuàng)建一個(gè)5行3列的DataFramedfdef
my_add(num):
#這里的num為df中的每一列,或者說(shuō)每一個(gè)Series
#既然是列,四則運(yùn)算是可以的,但是復(fù)雜的操作無(wú)法運(yùn)算
#print(num)
#如果搞不懂,打印出來(lái)就看明白了
return
num+10df.apply(my_add,axis=0)5.6Pandas高級(jí)操作5.6.5運(yùn)算工具(2)DataFrame中的apply操作5.6Pandas高級(jí)操作5.6.5運(yùn)算工具(3)DataFrame中的applymap方法applymap可以將某種運(yùn)算作用到DataFrame的每一個(gè)元素中。def
my_add(num):
#這里的num為df中的每一個(gè)數(shù)據(jù)
#可以對(duì)這個(gè)數(shù)據(jù)進(jìn)行更復(fù)雜的運(yùn)算
#print(num)
#如果搞不懂,打印出來(lái)就看明白了
return
num+10df.applymap(my_add)5.6Pandas高級(jí)操作5.6.6排序?qū)崿F(xiàn)的隨機(jī)抽樣隨機(jī)抽樣的思路是先將原來(lái)的數(shù)據(jù)的順序打亂,也就是進(jìn)行隨機(jī)排序,然后提取新數(shù)據(jù)中的前幾行。將數(shù)據(jù)打亂,我們可以用到DataFrame的兩個(gè)方法。 take(),可以根據(jù)指定的索引取樣
np.random.permutation(n),用來(lái)創(chuàng)建從0到n-1順序隨機(jī)的數(shù)組5.6Pandas高級(jí)操作5.6.6排序?qū)崿F(xiàn)的隨機(jī)抽樣df=pd.DataFrame(np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])#創(chuàng)建一些數(shù)據(jù),100行3列df.take(indices=[4,11,2,7],axis=0)#指定索引進(jìn)行取樣,例如取索引為4、11、2、7的幾行數(shù)據(jù)5.6Pandas高級(jí)操作5.6.6排序?qū)崿F(xiàn)的隨機(jī)抽樣np.random.permutation(5)#順序隨機(jī)的索引數(shù)組輸出結(jié)果:array([3,4,1,0,2])5.6Pandas高級(jí)操作5.6.6排序?qū)崿F(xiàn)的隨機(jī)抽樣df.take(np.random.permutation(100))[:10]
#實(shí)現(xiàn)對(duì)原數(shù)據(jù)的隨機(jī)取樣,并只提取前10條數(shù)據(jù)5.6Pandas高級(jí)操作5.6.7數(shù)據(jù)庫(kù)數(shù)據(jù)讀取(1)連接數(shù)據(jù)庫(kù)獲取數(shù)據(jù)Pandas可以直接使用關(guān)系型數(shù)據(jù)庫(kù)(如MySQL、Oracle和SQLite等)的連接導(dǎo)入數(shù)據(jù)。在使用sqlalchemy讀取MySQL中的數(shù)據(jù)之前,需要安裝“pipinstall--force-reinstall'sqlalchemy<=1.4.45'”,因?yàn)镻andas目前支持sqlalchemy1.4.45版本,暫時(shí)還不支持其高版本。5.6Pandas高級(jí)操作5.6.7數(shù)據(jù)庫(kù)數(shù)據(jù)讀?。?)連接數(shù)據(jù)庫(kù)獲取數(shù)據(jù)from
sqlalchemy
import
create_engine
#導(dǎo)入create_engine模塊import
pandas
as
pd
#初始化數(shù)據(jù)庫(kù)連接#按實(shí)際情況依次填寫(xiě)MySQL的用戶(hù)名、密碼、IP地址、端口、數(shù)據(jù)庫(kù)名engine=create_engine('mysql+pymysql://root:ggs009@/digital_economy')#MySQL導(dǎo)入DataFrame#填寫(xiě)自己所需的SQL語(yǔ)句,可以是復(fù)雜的查詢(xún)語(yǔ)句#使用pandas的read_sql_query函數(shù)執(zhí)行SQL語(yǔ)句,并存入DataFramesql_df=pd.read_sql('select*fromuser',engine)sql_df
#打印表中的部分?jǐn)?shù)據(jù)5.6Pandas高級(jí)操作5.6.7數(shù)據(jù)庫(kù)數(shù)據(jù)讀?。?)連接數(shù)據(jù)庫(kù)獲取數(shù)據(jù)5.6Pandas高級(jí)操作5.6.7數(shù)據(jù)庫(kù)數(shù)據(jù)讀取(2)將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)使用DataFrame的to_sql命令可以將DataFrame中的數(shù)據(jù)值寫(xiě)入存儲(chǔ)到數(shù)據(jù)庫(kù)中。#DataFrame寫(xiě)入MySQL#新建DataFramedf=pd.DataFrame({'username':['阿廣'],'password':['123'],'address':['廣西壯族自治區(qū)桂林市七星區(qū)541004'],'tel':['123456789'],'ssn':[]})#將DataFrame保存到MySQL數(shù)據(jù)庫(kù)中df.to_sql(name='user',con=engine,if_exists='append',index=False)sql_df=pd.read_sql('select*fromuser',engine)sql_df[-5:]#打印最后5條數(shù)據(jù)5.6Pandas高級(jí)操作5.6.7數(shù)據(jù)庫(kù)數(shù)據(jù)讀?。?)將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)5.7Pandas缺失值處理5.7.1默認(rèn)的缺失值在真實(shí)的數(shù)據(jù)中,往往會(huì)存在缺失的數(shù)據(jù)。在Python中空值為None,但是在Pandas中空值被顯示為NaN。df.isnull()、df.notnull():兩個(gè)函數(shù)互為取反df.isna():等同于df.isnull();df.notna()等同于df.notnull()df.fillna():填充缺失值df.dropna():刪除缺失值5.7Pandas缺失值處理5.7.1默認(rèn)的缺失值pd.Series(['王二','張三',None])
pd.Series(['李四','王五',np.nan])
#np.nan被自動(dòng)識(shí)別為NaN輸出結(jié)果:0王二1張三2Nonedtype:object0李四1王五2NaNdtype:object5.7Pandas缺失值處理5.7.2缺失值的判斷為了對(duì)缺失值進(jìn)行操作,通常需要先判斷是否存在缺失值,通過(guò)isnull和notnull兩個(gè)函數(shù)可以快速判斷。a=pd.Series(['王二','張三',None])a.isnull()
#isnull方法,如果為NaN,返回True,否則返回Falseb=pd.Series(['李四','王五',np.nan])b.notnull()
#notnull方法,如果為NaN,返回False,否則返回True輸出結(jié)果:0False1False2Truedtype:bool0True1True2Falsedtype:bool5.7Pandas缺失值處理5.7.3缺失值的填充通過(guò)fillna方法和replace方法可以快速地填充缺失值。(1)Series對(duì)象a=pd.Series(['王二','張三',None,'王五'])a.fillna(value='李四')
#value參數(shù),表示用一個(gè)指定的值(標(biāo)量值)來(lái)替換缺失值a.fillna(method='pad')#method參數(shù),指定一種方法來(lái)填充缺失值;pad方法,表示用NaN前面一個(gè)值來(lái)進(jìn)行填充,等同于ffill方法a.fillna(method='bfill')#bfill方法,表示用NaN后面一個(gè)值來(lái)進(jìn)行填充a.replace(np.nan,'趙六')#replace方法,其中缺失值需要用np.nan來(lái)表示5.7Pandas缺失值處理5.7.3缺失值的填充通過(guò)fillna方法和replace方法可以快速地填充缺失值。(1)Series對(duì)象輸出結(jié)果:0王二1張三2李四3王五dtype:object0王二1張三2張三3王五dtype:object0王二1張三2王五3王五dtype:object0王二1張三2趙六3王五dtype:object5.7Pandas缺失值處理5.7.3缺失值的填充(2)DataFrame對(duì)象df=pd.DataFrame(
{'name':['王二','張三','王五','趙六'],
'age':[22,30,None,26]})dfdf.fillna(df.mean(numeric_only=True))#對(duì)數(shù)值列的NaN值,可以用對(duì)應(yīng)的均值來(lái)填充5.7Pandas缺失值處理5.7.4缺失值的刪除通過(guò)dropna方法來(lái)快速刪除NaN值。(1)Series對(duì)象a=pd.Series(['王二','張三',None,'王五'])aa.dropna()輸出結(jié)果:0王二1張三2None3王五dtype:object0王二1張三3王五dtype:object5.7Pandas缺失值處理5.7.4缺失值的刪除(2)DataFrame對(duì)象dropna操作數(shù)據(jù)框時(shí),可以設(shè)置axis參數(shù)的值:默認(rèn)為axis=0,表示去除包含了NaN的行;axis=1,表示去除包含了NaN的列。df=pd.DataFrame(
{'name':['王二','張三','王五','趙六'],
'age':[22,30,None,26]})dfdf.dropna()
#默認(rèn)為axis=0,去除包含了NaN的行df.dropna(axis=1)#axis=1,去除包含了NaN的列5.8Pandas數(shù)據(jù)分組5.8.1單類(lèi)分組對(duì)數(shù)據(jù)進(jìn)行分組及分組運(yùn)算,我們可以通過(guò)groupby函數(shù)來(lái)實(shí)現(xiàn)。groupby函數(shù)主要的作用是進(jìn)行數(shù)據(jù)分組,以及分組后的組內(nèi)運(yùn)算。df=pd.DataFrame({'name':['王二','張三','李四','王五','趙六'],
'gender':['女性','女性','男性','男性','男性'],
'class':[1,2,1,1,2],
'height':[161,160,180,161,170]})dfdf.groupby('gender')#單類(lèi)分組5.8Pandas數(shù)據(jù)分組5.8.1單類(lèi)分組(1)describe()函數(shù)describe()函數(shù)描述組內(nèi)數(shù)據(jù)的基本統(tǒng)計(jì)量。注意:只有數(shù)字類(lèi)型的列數(shù)據(jù)才會(huì)被計(jì)算統(tǒng)計(jì)。示例里面數(shù)字類(lèi)型的數(shù)據(jù)有兩列“class”和“height”。df.groupby('gender').describe()5.8Pandas數(shù)據(jù)分組5.8.1單類(lèi)分組(2)選擇特定列但是,我們并不需要統(tǒng)計(jì)班級(jí)的均值等信息,只需要“height”,因此需要做一下小的改動(dòng)。df.groupby('gender')['height'].describe()#選擇height列5.8Pandas數(shù)據(jù)分組5.8.2多類(lèi)分組(1)選擇多個(gè)列df.groupby(['class','gender']).mean()#多類(lèi)分組,同時(shí)選兩個(gè)列'class','gender'
5.8Pandas數(shù)據(jù)分組5.8.2多類(lèi)分組(2)運(yùn)用多個(gè)函數(shù)我們還可以一次運(yùn)用多個(gè)函數(shù)來(lái)進(jìn)行計(jì)算。df.groupby(['class','gender']).agg([np.sum,np.mean,np.std])#通過(guò)agg()函數(shù)一次計(jì)算三個(gè)5.8Pandas數(shù)據(jù)分組5.8.3時(shí)間分組(1)按照“birthday”的年份進(jìn)行分組,看看有多少人是同齡df=pd.DataFrame({'name':['王二','張三','李四','王五','趙六'],
'gender':['女性','女性','男性','男性','男性'],
'class':[1,2,1,1,2],
'birthday':['1992/01/01','1993/01/01','1992/02/01','1992/03/01','1993/01/02'],#新增
'height':[161,160,180,161,170]})df.dtypes
#查看數(shù)據(jù)類(lèi)型5.8Pandas數(shù)據(jù)分組5.8.3時(shí)間分組將“birthday”列轉(zhuǎn)換為日期類(lèi)型,然后再據(jù)它進(jìn)行分組。df['birthday']=pd.to_datetime(df['birthday'],format='%Y/%m/%d')#轉(zhuǎn)化為時(shí)間格式dfdf.groupby(df['birthday'].apply(lambda
x:x.year)).count()
#按照'birthday'的年份分組,計(jì)算組內(nèi)的數(shù)量5.8Pandas數(shù)據(jù)分組5.8.3時(shí)間分組(2)同一年作為一個(gè)小組,小組內(nèi)生日靠前的那一位作為小隊(duì)長(zhǎng)df.sort_values('birthday',inplace=True)
#按時(shí)間排序df.groupby(df['birthday'].apply(lambda
x:x.year),as_index=False).first()#as_index=False表示保持原來(lái)的數(shù)據(jù)索引結(jié)果不變。first()表示保留第一個(gè)數(shù)據(jù),Tail(n=1)表示保留最后n個(gè)數(shù)據(jù)5.8Pandas數(shù)據(jù)分組5.8.3時(shí)間分組(3)想要找到哪個(gè)月只有一個(gè)人過(guò)生日df.groupby(df['birthday'].apply(lambda
x:x.month),as_index=False)
#到這里是按月分組df.groupby(df['birthday'].apply(lambda
x:x.month),as_index=False).filter(lambda
x:len(x)==1)#filter()表示對(duì)分組進(jìn)行過(guò)濾,保留滿(mǎn)足()條件的分組5.9Pandas數(shù)據(jù)合并5.9.1數(shù)據(jù)準(zhǔn)備數(shù)據(jù)合并是數(shù)據(jù)處理過(guò)程中的必經(jīng)環(huán)節(jié),作為數(shù)據(jù)分析的利器,Pandas提供了五種常用的數(shù)據(jù)合并方式。#產(chǎn)品表df1=pd.DataFrame(
{'產(chǎn)品編號(hào)':['CP13','CP14','CP15','CP16','CP17'],
'產(chǎn)品名稱(chēng)':['產(chǎn)品A003','產(chǎn)品A004','產(chǎn)品A005','產(chǎn)品A006','產(chǎn)品A007']})#訂單表df2=pd.DataFrame(
{'訂單編號(hào)':['20220913','20220914','20220915','20220915'],
'產(chǎn)品編號(hào)':['CP13','CP14','CP15','CP16'],
'產(chǎn)品銷(xiāo)量':[13,24,45,32],
'負(fù)責(zé)人':["張三","趙六","周八","周八"]})df1
#打印產(chǎn)品表df2
#打印訂單表5.9Pandas數(shù)據(jù)合并5.9.1數(shù)據(jù)準(zhǔn)備5.9Pandas數(shù)據(jù)合并5.9.2concat函數(shù)concat是Pandas中專(zhuān)門(mén)用于數(shù)據(jù)連接合并的函數(shù),功能非常強(qiáng)大,支持縱向合并和橫向合并,默認(rèn)情況下是縱向合并,具體可以通過(guò)參數(shù)進(jìn)行設(shè)置。合并的對(duì)象可以是Series,還可以是Dataframe。5.9Pandas數(shù)據(jù)合并5.9.2concat函數(shù)(1)縱向合并(默認(rèn))#axis=0表示縱向合并,合并依據(jù)是列名(產(chǎn)品編號(hào)),默認(rèn)縱向合并#join='outer'外聯(lián),表示保留兩個(gè)表所有的行索引,也就是并集,默認(rèn)外聯(lián)#如果兩個(gè)數(shù)據(jù)表中有個(gè)數(shù)據(jù)沒(méi)有對(duì)應(yīng)行或列,則會(huì)填充為空值NaNpd.concat([df1,df2])#默認(rèn)縱向合并5.9Pandas數(shù)據(jù)合并5.9.2concat函數(shù)(2)橫向合并pd.concat([df1,df2],axis=1)#axis=1表示橫向合并5.9Pandas數(shù)據(jù)合并5.9.2concat函數(shù)(3)交集合并#axis=1表示橫向合并#join='inner'內(nèi)聯(lián),表示保留兩個(gè)表共有的行索引
pd.concat([df1,df2],axis=1,join='inner')5.9Pandas數(shù)據(jù)合并5.9.2concat函數(shù)(4)Dataframe與Series合并#df1是Dataframe#df2['訂單編號(hào)']是Seriespd.concat([df1,df2['訂單編號(hào)']],axis=1,join='inner')5.9Pandas數(shù)據(jù)合并5.9.3merge函數(shù)merge可以根據(jù)一個(gè)或多個(gè)鍵(key)將不同DataFrame中的行連接起來(lái)。它的左表必須是Dataframe,合并的數(shù)量只能是兩個(gè),合并的方向只能是橫向合并。#left_on表示左表要進(jìn)行合并的字段,right_on表示右表要進(jìn)行合并的字段#how表示數(shù)據(jù)連接方式,默認(rèn)為inner,可選outer、left和rightpd.merge(df1,df2,left_on='產(chǎn)品編號(hào)',right_on='產(chǎn)品編號(hào)',how='right')#how='right'表示返回連接的右表中存在的所有行(僅使用右表中的鍵)5.9Pandas數(shù)據(jù)合并5.9.4append函數(shù)append主要用于追加數(shù)據(jù),是比較簡(jiǎn)單直接的數(shù)據(jù)合并方式。它和concat縱向合并的結(jié)果類(lèi)似。df1.append(df2)5.9Pandas數(shù)據(jù)合并5.9.5join函數(shù)join的操作與concat橫向合并的結(jié)果類(lèi)似。df1.join(df2,lsuffix='_b',rsuffix='_a')#lsuffix表示左表同名列后綴,rsuffix右右同名列后綴5.9Pandas數(shù)據(jù)合并5.9.6combine函數(shù)在數(shù)據(jù)合并的過(guò)程中,我們可能需要對(duì)對(duì)應(yīng)位置的值進(jìn)行一定的計(jì)算。combine可以進(jìn)行這方面的合并操作,它通過(guò)使用函數(shù)把兩個(gè)DataFrame按列進(jìn)行組合。(1)combine()s1=pd.DataFrame({'A銷(xiāo)量':[3,4],'B銷(xiāo)量':[1,4]})s1
s2=pd.DataFrame({'A銷(xiāo)量':[1,2],'B銷(xiāo)量':[5,6]})s2
s1.combine(s2,lambda
a,b:np.where(a>b,a,b))
#匿名函數(shù)用于返回對(duì)應(yīng)位置上的最大值5.9Pandas數(shù)據(jù)合并5.9.6combine函數(shù)(2)combine_first()combine_first()函數(shù)用于合并兩個(gè)數(shù)據(jù)集,并根據(jù)缺失值的情況填充數(shù)據(jù),確保最終數(shù)據(jù)的完整性和準(zhǔn)確性。如果第一個(gè)DataFrame的值為缺失值(NaN),則使用第二個(gè)DataFrame對(duì)應(yīng)索引位置和列名的值進(jìn)行填充。如果第一個(gè)DataFrame的值不是缺失值,則保留該值。5.9Pandas數(shù)據(jù)合并5.9.6combine函數(shù)(2)combine_first()s1=pd.DataFrame({'A銷(xiāo)量':[3,4],'B銷(xiāo)量':[1,None]})#定義了一個(gè)Nones1
s2=pd.DataFrame({'A銷(xiāo)量':[1,2],'B銷(xiāo)量':[5,6]})s2
s1.combine_first(s2)5.10Pandas時(shí)間序列時(shí)間序列數(shù)據(jù)在金融、經(jīng)濟(jì)都是一種重要的結(jié)構(gòu)化的數(shù)據(jù)表現(xiàn)形式,例如經(jīng)濟(jì)數(shù)據(jù)中大多數(shù)以時(shí)間序列的形式給出。時(shí)間序列分析的主要目的是根據(jù)已有的歷史數(shù)據(jù)對(duì)未來(lái)進(jìn)行預(yù)測(cè)。根據(jù)觀(guān)察時(shí)間的不同,時(shí)間序列中的時(shí)間可以是年份、季度、月份或其他任何時(shí)間形式。存在三種常用的時(shí)間序列數(shù)據(jù)形式。時(shí)間戳(Timestamp)時(shí)期(Period)。時(shí)間間隔(Interval)5.10Pandas時(shí)間序列5.10.1時(shí)間戳?xí)r間戳表示一個(gè)特定的時(shí)刻,它可以是一天的日期,也可以是給定日期的納秒,具體取決于精度。例如,“2022–01–0114:59:30”是基于秒的時(shí)間戳。(1)Timestamp()d1='2023-1-1'
#字符串t1=pd.Timestamp(d1)
#Timestamp只能產(chǎn)生單個(gè)時(shí)間戳數(shù)據(jù)t1d2=datetime(2023,1,2)#內(nèi)置時(shí)間模塊t2=pd.Timestamp(d2)t2輸出結(jié)果:Timestamp('2023-01-0100:00:00')Timestamp('2023-01-0200:00:00')5.10Pandas時(shí)間序列5.10.1時(shí)間戳(2)to_datetime()to_datetime()用于產(chǎn)生多個(gè)時(shí)間戳數(shù)據(jù)或者時(shí)間戳列表。d1='2023-1-1'
t1=pd.to_datetime(d1)#產(chǎn)生單個(gè)時(shí)間戳數(shù)據(jù)t1t_lst=['20230101','20230102','20230103']
#時(shí)間序列列表t2=pd.to_datetime(t_lst)
#產(chǎn)生多個(gè)時(shí)間戳數(shù)據(jù)或者時(shí)間戳列表t2輸出結(jié)果:Timestamp('2023-01-0100:00:00')DatetimeIndex(['2023-01-01','2023-01-02','2023-01-03'],dtype='datetime64[ns]',freq=None)5.10Pandas時(shí)間序列5.10.2時(shí)期時(shí)期表示一段時(shí)間,例如2022年12月、2022年全年等。(1)Period()Period()創(chuàng)建一個(gè)具體的時(shí)期或時(shí)段。p1=pd.Period('2023-1-1',freq='A')#freq='A',以年末為頻率產(chǎn)生時(shí)間序列print(p1)p2=p1.asfreq('M',how='start')#通過(guò)asfreq方法轉(zhuǎn)換成別的頻率,當(dāng)年的開(kāi)始月份('M')print(p2)p3=p1.asfreq('D',how='end')
#當(dāng)年的結(jié)束日期('D')print(p3)輸出結(jié)果:20232023-012023-12-315.10Pandas時(shí)間序列5.10.2時(shí)期(2)period_range()period_range()用于創(chuàng)建一個(gè)固定頻率的時(shí)期范圍。pr1=pd.period_range(start='2023-1-1',end='2023-6-10',freq='M')#freq='M'是間隔一分鐘pr1輸出結(jié)果:PeriodIndex(['2023-01','2023-02','2023-03','2023-04','2023-05','2023-06'],dtype='period[M]')5.10Pandas時(shí)間序列5.10.3時(shí)間間隔時(shí)間間隔由起始時(shí)間戳和結(jié)束時(shí)間戳表示。時(shí)期可以看做是時(shí)間間隔的特例。dr1=pd.date_range('2023-1-1','2023-1-7',freq='2D')#freq='2D'是間隔兩天dr1dr2=pd.date_range('2023-1-112:30:30','2023-01-02',freq='3H')#freq='3H'是間隔三小時(shí)dr2dr3=pd.date_range('2023-1-1','2023-1-6',freq='M')#freq='M'是間隔一個(gè)月dr3dr4=pd.date_range('2023-1-112:30:30',periods=5,freq='2h20min')#period設(shè)置時(shí)間的個(gè)數(shù)dr45.10Pandas時(shí)間序列輸出結(jié)果:DatetimeIndex(['2023-01-01','2023-01-03','2023-01-05','2023-01-07'],dtype='datetime64[ns]',freq='2D')DatetimeIndex(['2023-01-0112:30:30','2023-01-0115:30:30','2023-01-0118:30:30','2023-01-0121:30:30'],dtype='datetime64[ns]',freq='3H')DatetimeIndex([],dtype='datetime64[ns]',freq='M')DatetimeIndex(['2023-01-0112:30:30','2023-01-0114:50:30','2023-01-0117:10:30','2023-01-0119:30:30','2023-01-0121:50:30'],dtype='datetime64[ns]',freq='140T')5.10Pandas時(shí)間序列5.10.4重采樣重采樣(resample)就是將時(shí)間序列從一個(gè)頻率轉(zhuǎn)換到另一個(gè)頻率的處理過(guò)程。(1)降采樣如果是將高頻率數(shù)據(jù)聚合到低頻率,例如將每日采集的頻率變成每月采集,則稱(chēng)為降采樣(downsamling)。5.10Pandas時(shí)間序列5.10.4重采樣(1)降采樣dr=pd.da
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)行業(yè)加強(qiáng)樓盤(pán)衛(wèi)生管理
- 娛樂(lè)休閑行業(yè)活動(dòng)組織總結(jié)
- 2024年特種危險(xiǎn)品航空運(yùn)輸合同標(biāo)準(zhǔn)范本3篇
- 《一棵小桃樹(shù)》教學(xué)設(shè)計(jì)
- 農(nóng)業(yè)設(shè)計(jì)師設(shè)計(jì)現(xiàn)代農(nóng)具提高農(nóng)作效率
- 醫(yī)療服務(wù)前臺(tái)工作心得體會(huì)
- 2024年度文員市場(chǎng)調(diào)研與分析服務(wù)合同3篇
- 交通運(yùn)輸行業(yè)司機(jī)技能提升總結(jié)
- 2024年度物流運(yùn)輸預(yù)付款擔(dān)保合同范本3篇
- 幼兒用書(shū)合同范本
- 中小學(xué)校園人車(chē)分流方案模板
- 魚(yú)類(lèi)外部形態(tài)-魚(yú)類(lèi)的皮膚及其衍生物
- GB/T 42220-2022金鑲玉鑲嵌工藝質(zhì)量評(píng)價(jià)
- 2023年04月2023年外交學(xué)院招考聘用筆試參考題庫(kù)附答案解析
- 基于單片機(jī)數(shù)字秒表的設(shè)計(jì)
- 中國(guó)自身免疫性腦炎診治專(zhuān)家共識(shí)2023年版
- 淺圓倉(cāng)倉(cāng)頂模板施工方案匯總
- 涂鱗、襯膠防腐專(zhuān)項(xiàng)施工方案
- GB/T 4269.3-2000農(nóng)林拖拉機(jī)和機(jī)械、草坪和園藝動(dòng)力機(jī)械操作者操縱機(jī)構(gòu)和其他顯示裝置用符號(hào)第3部分:草坪和園藝動(dòng)力機(jī)械用符號(hào)
- GB/T 21655.2-2019紡織品吸濕速干性的評(píng)定第2部分:動(dòng)態(tài)水分傳遞法
- GB/T 11618.1-2008銅管接頭第1部分:釬焊式管件
評(píng)論
0/150
提交評(píng)論