數(shù)據(jù)分析基礎(chǔ) 課件 項(xiàng)目3 Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)_第1頁(yè)
數(shù)據(jù)分析基礎(chǔ) 課件 項(xiàng)目3 Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)_第2頁(yè)
數(shù)據(jù)分析基礎(chǔ) 課件 項(xiàng)目3 Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)_第3頁(yè)
數(shù)據(jù)分析基礎(chǔ) 課件 項(xiàng)目3 Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)_第4頁(yè)
數(shù)據(jù)分析基礎(chǔ) 課件 項(xiàng)目3 Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

任務(wù)3.1

從csv文件中讀取餐飲訂單數(shù)據(jù)1知識(shí)準(zhǔn)備2任務(wù)描述任務(wù)實(shí)施33.1

從csv文件中讀取餐飲訂單數(shù)據(jù)【任務(wù)描述】數(shù)據(jù)讀取是進(jìn)行數(shù)據(jù)預(yù)處理、分析與建模的前提。對(duì)于不同的數(shù)據(jù)源pandas提供了不同的函數(shù)進(jìn)行讀取。Pandas提供了10多種不同數(shù)據(jù)源的讀取函數(shù)和對(duì)應(yīng)的數(shù)據(jù)源寫入函數(shù)。我們這里掌握兩種常見的數(shù)據(jù)源數(shù)據(jù)的讀取/寫入函數(shù)。分別是文本文件(包括文本文件和CSV文件)、Excel文件。這里以餐飲信息數(shù)據(jù)為例,方便學(xué)習(xí)。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】1.了解pandas庫(kù)pandas是Python的核心數(shù)據(jù)分析支持庫(kù),提供了快速、靈活、明確的數(shù)據(jù)結(jié)構(gòu),旨在簡(jiǎn)單、直觀地處理關(guān)系型、標(biāo)記型數(shù)據(jù)。同時(shí)由于pandas建造在Numpy之上,所以使得pandas在以Numpy為中心的應(yīng)用中得以容易的使用,而pandas庫(kù)在與其它第三方科學(xué)計(jì)算支持庫(kù)結(jié)合時(shí)也能夠完美的進(jìn)行集成。在Python中,pandas庫(kù)的功能十分強(qiáng)大,它可提供高性能的矩陣運(yùn)算。也可用于數(shù)據(jù)挖掘和數(shù)據(jù)分析,同時(shí)也提供數(shù)據(jù)清洗功能;支持類似SQL的數(shù)據(jù)增、刪、查、改,并且?guī)в胸S富的數(shù)據(jù)處理函數(shù);支持時(shí)間序列分析功能;支持靈活處理缺失數(shù)據(jù)等。pandas有兩個(gè)常用的數(shù)據(jù)結(jié)構(gòu)

。使用這兩個(gè)數(shù)據(jù)結(jié)構(gòu)已經(jīng)能夠處理大多數(shù)的統(tǒng)計(jì)分析問題。(1)Series(一維數(shù)據(jù))是一種類似于一維數(shù)組的對(duì)象,是由一組數(shù)據(jù)(各種Numpy數(shù)據(jù)類型)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成,而僅由一組數(shù)據(jù)也可產(chǎn)生簡(jiǎn)單的Series對(duì)象。(2)DataFrame是pandas中的一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),包含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型等),DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】2.讀/寫文本文件文本文件是一種由若干行字符構(gòu)成的計(jì)算機(jī)文件,它是一種典型的順序文件。CSV是一種用分隔符分隔的文件格式,因?yàn)槠浞指舴灰欢ㄊ嵌禾?hào),所以又被稱為字符分隔文件。文本文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),它是一種通用、相對(duì)簡(jiǎn)單的文件格式,最廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),而這些程序本身是在不兼容的格式上進(jìn)行操作的。由于大量程序都支持CSV或其變體,所以CSV或其變體可以作為大多數(shù)程序的輸入和輸出格式。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)pandas.read_table(filepath,sep=<no_default>,header='infer',encoding='gbk',names=<no_default>,index_col=None,dtype=None,engine=None,nrows=None,

skiprows=None)pandas.read_csv(filepath,sep=<no_default>,header='infer',

encoding='utf-8',names=<no_default>,index_col=None,

dtype=None,engine=None,nrows=None,

skiprows=None)1文本文件讀取CSV文件根據(jù)其定義也是一種文本文件。在數(shù)據(jù)讀取過程中可以使用文本文件的讀取函數(shù)對(duì)CSV文件進(jìn)行讀取。同時(shí),如果文本文件是字符分隔文件,那么可以使用讀取CSV文件的函數(shù)進(jìn)行讀取。pandas提供了read_table()函數(shù)讀取文本文件,提供了read_csv()函數(shù)讀取CSV文件。兩個(gè)函數(shù)的基本使用格式(部分參數(shù))如下:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)參數(shù)名稱用途說明filepath接收str。表示文件路徑。無默認(rèn)值。sep接收str。表示分隔符。read_csv函數(shù)默認(rèn)為“,”,read_table函數(shù)默認(rèn)為制表符“Tab”names接收array。表示列名。無默認(rèn)值index_col接收int、sequence或False。表示索引列的位置,取值為sequence則代表多重索引。默認(rèn)為None。dtype接收字典形式的列名或type

name。表示寫入的數(shù)據(jù)類型(列名為key,數(shù)據(jù)格式為values)。默認(rèn)為Nonenrows接收int。要讀取的文件行數(shù)。默認(rèn)為Noneencoding接收文件的編碼格式。常用有utf-8,gbk。【任務(wù)實(shí)施】read_table()函數(shù)和read_csv()函數(shù)的許多數(shù)參數(shù)相同,它們的常用參數(shù)及其說明如表3-1所示。表3-1

read_table()函數(shù)和read_csv()函數(shù)的常用參數(shù)說明Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】以某餐飲公司的信息表為例子,其主要的數(shù)據(jù)特征為

:detail_id,order_id,dishes_id,logicprn_name,dishes_name,counts,amounts,place_order_time等,部分信息如圖3-1所示。圖3-1

某餐飲店訂單的信息In[1]:importpandasas

pd#

使用read_table函數(shù)讀取餐飲訂單信息表order=pd.read_table('D:\Anaconda\order1.csv',sep=',',

encoding='gbk')print('使用read_table函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:',

len(order))#

使用read_csv函數(shù)讀取餐飲訂單信息表order1=pd.read_csv('D:\Anaconda\order1.csv',

encoding='gbk')print('使用read_csv函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:',

len(order1))Out[1]:

使用read_table函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:

2779使用read_csv函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:

2779Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】根據(jù)餐飲店訂單信息表,分別使用read_table和read_csv函數(shù)對(duì)其讀取數(shù)據(jù),代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】read_table()函數(shù)和read_csv()函數(shù)應(yīng)注意。sep參數(shù)是指定文本的分隔符,如果分隔符指定錯(cuò)誤,那么在讀取數(shù)據(jù)的時(shí)候,每一行數(shù)據(jù)將連成一片。header參數(shù)用于指定列名,如果header參數(shù)值是None,那么將會(huì)添加一個(gè)默認(rèn)的列名。encoding代表文件的編碼格式,常用的編碼格式有UTF-8、UTF-16、GBK、GB2312、GB

18030等。如果編碼指定錯(cuò)誤,那么數(shù)據(jù)將無法讀取,IPython解釋器會(huì)報(bào)解析錯(cuò)誤。數(shù)據(jù)將無法讀取。改變r(jià)ead_table函數(shù)和read_csb中的參數(shù)讀取餐飲訂單信息表具體代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】In[2]:order2=pd.read_table('D:\Anaconda\order1.csv',sep=';',encoding='gbk')print('使用read_table函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:',

order2)

#使用read_csv函數(shù)讀取餐飲訂單信息表order3=pd.read_csv('D:\Anaconda\order1.csv',sep=',',header=None,encoding='gbk')print('使用read_csv函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:',

order3)Out[2]:使用read_table函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:detail_id,order_id,dishes_id,logicprn_name,parent_class_name,dishes_name,itemis_add,counts,amounts,cost,place_order_time,discount_amt,discount_reason,kick_back,add_inprice,add_info,bar_code,picture_file,emp_id012956,417,610062,NA,NA,蒜蓉生蠔,0,1,49,NA,2016/8/1

...2958,417,609957,NA,NA,蒙古烤羊腿,0,1,48,NA,2016/8/1...23...2966,417,610038,NA,NA,芝麻烤紫菜,0,1,25,NA,2016/8/1...2968,417,610003,NA,NA,蒜香包,0,1,13,NA,2016/8/1

1...... ...2774

6750,774,610011,NA,NA,白飯/大碗,0,1,10,NA,2016/8/1...2775

6742,774,609996,NA,NA,牛尾湯,0,1,40,NA,2016/8/10

...2776

6756,774,609949,NA,NA,意文檸檬汁

,0,1,13,NA,2016/8/...... ... ...[2779rowsx1

columns]Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用read_csv函數(shù)讀取餐飲訂單信息表的長(zhǎng)度為:0detail_idorder_iddishes_idlogicprn_nameparent_class_name12956417610062NaN

NaN22958417609957NaN

NaN32961417609950NaN

NaN42966417610038NaN

NaN..................27756750774610011NaN

NaN27766742774609996NaN

NaN27776756774609949NaN

NaN27786763774610014NaN

NaN27796764774610017NaNNaN[2780rowsx19

columns]Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】2.文本文件的寫入文本文件存儲(chǔ)的方法和文件讀取的方法類似

,對(duì)于結(jié)構(gòu)化數(shù)據(jù),可以通過pandas庫(kù)中的to_csv()方法

實(shí)現(xiàn)以CSV文件格式存儲(chǔ)。to_csv()方法同樣具有許多參數(shù),如果有多個(gè)<expression

> ,那么表達(dá)式之間用逗號(hào)隔開,基本使用格式如下:DataFrame.to_csv(path=None,sep=',',na_rep='',columns=None,header=True,index=True,index_label=None,mode='w',

encoding=None)Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】to_csv()方法的常用參數(shù)說明如表3-2所示。表3-2

to_csv()方法的常用參數(shù)說明參數(shù)名稱用途說明Path接收str。表示文件路徑。默認(rèn)為Nonesep接收str。表示分隔符。默認(rèn)為“,”na_rep接收str。表示缺失值。默認(rèn)為“”header接收bool或列表形式的str。表示是否將列名寫出。index接收bool。表示是否將行名(索引)寫出。默認(rèn)為Truemode接收特定str。表示數(shù)據(jù)寫入模式。encoding接收特定str。表示存儲(chǔ)文件的編碼格式。默認(rèn)為NonePandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用to_csv()方法的將餐飲訂單信息表寫入CSV文件,代碼如下所示:In[3]:importosprint('餐飲訂單信息表寫入文本文件前目錄內(nèi)文件列表為:\n',os.listdir('D:\Anaconda\csv'))#將order以csv格式存儲(chǔ)order.to_csv('D:\Anaconda\csv\orderInfo.csv',sep=';',

index=False)print('餐飲訂單信息表寫入文本文件后目錄內(nèi)文件列表為:\n',os.listdir('D:\Anaconda\csv’))Out[3]:

餐飲訂單信息表寫入文本文件前目錄內(nèi)文件列表為:['arr.txt','oedre1.xlsx','order.csv','savez_arr.npz',

'save_arr.npy']餐飲訂單信息表寫入文本文件后目錄內(nèi)文件列表為:['arr.txt','oedre1.xlsx','order.csv','orderInfo.csv','savez_arr.npz','save_arr.npy']Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】3.讀取/存儲(chǔ)Excel文件Excel是微軟公司的辦公軟件Microsoft

Office的組件之一,它可以對(duì)數(shù)據(jù)進(jìn)行處理、統(tǒng)計(jì)分析等操作,廣泛地應(yīng)用于管理、金融等各個(gè)領(lǐng)域。讀取Excel文件pandas庫(kù)提供了read_excel()函數(shù)讀取“xls”和“xlsx”兩種Excel文件,基本使用格式如下:read_excel()函數(shù)的常用參數(shù)及其說明如表3-3所示。pandas.read_excel(path,sheet_name=0,header=0,names=None,index_col=None,dtype=None,skiprows=None)Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】表3-3

read_excel函數(shù)的常用參數(shù)說明參數(shù)名稱用途說明path接收str。表示文件路徑。無默認(rèn)值sheet_name接收str、int、list或None。表示Excel表內(nèi)數(shù)據(jù)的分表位置。默認(rèn)為0header接收int或列表形式的int。表示將某行數(shù)據(jù)作為列名。如果傳遞整數(shù)列表,那么行位置將合并為MultiIndex。如果沒有表頭,那么使用None。names接收array。表示要使用的列名列表。默認(rèn)為Noneindex_col接收int或列表形式的int。表示將列索引用作DataFrame

的行索引。默認(rèn)為Nonedtype接收dict。表示寫入的數(shù)據(jù)類型(列名為key,數(shù)據(jù)格式為values)。默認(rèn)為Noneskiprows接收list、int或callable。表示讀取數(shù)據(jù)開頭跳過的行數(shù)。默認(rèn)為NonePandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用read_excel()函數(shù)讀取餐飲訂單信息表中的數(shù)據(jù),代碼如下所示。In[4]order=

pd.read_excel('D:\Anaconda/order1.xlsx')print('餐飲訂單信息表長(zhǎng)度為:',

len(order))Out[4]:

餐飲訂單信息表長(zhǎng)度為:

2779Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】寫入Excel文件將數(shù)據(jù)寫入到excel文件,方法和前面寫入CSV文件類似,可以使用to_excel()方法,其基本格式如下:To_excel()方法的常用參數(shù)及其說明如表3-4所示。表3-4

To_excel()方法的常用參數(shù)及其說明參數(shù)名稱用途說明Path接收str。表示文件路徑。無默認(rèn)值sheet_name接收str。表示Excel文件中工作簿的名稱。默認(rèn)為Sheet1na_rep接收str。表示缺失值。默認(rèn)為“”columns接收列表形式的str或sequence。表示寫出的列名。header接收bool或列表形式的str。表示是否將列名寫出。index接收bool。表示是否將行名(索引)寫出。默認(rèn)為TrueDataFrame.to_excel(path,sheet_name='Sheet1',na_rep='',columns=None,header=True,index=True,index_label=None,

encoding=None)Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】To_excel()方法把餐飲訂單信息表寫入Excel文件中,代碼如下所示:In[5]print('餐飲訂單信息表寫入Excel文件前,目錄內(nèi)文件列表為:\n',os.listdir('D:\Anaconda\csv'))order.to_excel('D:\Anaconda\csv/order.xlsx')print('餐飲訂單信息表寫入Excel文件后,目錄內(nèi)文件列表為:\n',os.listdir('D:\Anaconda\csv'))

Out[5]:

餐飲訂單信息表寫入Excel文件前,目錄內(nèi)文件列表為:['arr.txt','oedre1.xlsx','order.csv','orderInfo.csv','savez_arr.npz',

'save_arr.npy']餐飲訂單信息表寫入Excel文件后,目錄內(nèi)文件列表為:['arr.txt','oedre1.xlsx','order.csv','order.xlsx','orderInfo.csv','savez_arr.npz',

'save_arr.npy']任務(wù)3.2 創(chuàng)建餐飲訂單數(shù)據(jù)的DataFrame1知識(shí)準(zhǔn)備2任務(wù)描述任務(wù)實(shí)施33.2

創(chuàng)建餐飲訂單數(shù)據(jù)的DataFrame【任務(wù)描述】DataFrame是pandas常見的操作對(duì)象。在使用數(shù)據(jù)讀取函數(shù)后,數(shù)據(jù)將以DataFrame數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)在內(nèi)存中。但此時(shí)并不能直接開始統(tǒng)計(jì)分析。需要使用DataFrame的屬性與方法對(duì)數(shù)據(jù)進(jìn)行了解才能進(jìn)行統(tǒng)計(jì)分析。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】查看DataFrame的常用屬性DataFrame的基礎(chǔ)屬性如下。Values:可以獲取元素;Index:可以獲取索引;Column:可以獲取列名;Dtypes:可以獲取類型

。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】分別查看餐飲訂單信息表的4個(gè)基本屬性的代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)In[6]:importpandasas

pdorder=pd.read_csv('D:\Anaconda\order1.csv',

encoding='gbk')print('餐飲訂單信息表的索引為:',

order.index)print('餐飲訂單信息表的元素為:\n',

order.values)print('餐飲訂單信息表的列名為:\n',

order.columns)print('餐飲訂單信息表的數(shù)據(jù)類型為:\n',

order.dtypes)Out[6]:餐飲訂單信息表的索引為:

RangeIndex(start=0,stop=2779,step=1)【知識(shí)準(zhǔn)備】Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)餐飲訂單信息表的所有值為:[[2956417610062…n‘n'caipu/104001.’pg'

1442][2958417609957...n‘n'caipu/202003.’pg'

1442][2961417609950...n‘n'caipu/303001.’pg'

1442]...[6756774609949...n‘n'caipu/404005.’pg'

1138][6763774610014...n‘n'caipu/302003.’pg'

1138][6764774610017...n‘n

'caipu/302006.’pg'

1138]]餐飲訂單信息表的列名為:Index(['detail_id','order_id','dishes_id',

'logicprn_name','parent_class_name','dishes_name','itemis_add','counts',

'amounts','cost','place_order_time','discount_amt','discount_reason','kick_back','add_inprice','add_info','bar_code','picture_file','emp_id'],dtype='object')餐飲訂單信息表的數(shù)據(jù)類型為:detail_id

int64order_id

int64dishes_id

int64logicprn_name

float64parent_class_name

float64dishes_name

objectitemis_add

int64counts

int64amounts

int64cost

float64…………

…picture_fileobjectemp_idint64dtype:

objectPandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】除了上述4個(gè)基本屬性,還可以通過size、ndim和shape屬性獲取DataFrame的元素個(gè)數(shù)、維度數(shù)和數(shù)據(jù)形狀(行列數(shù)目),代碼如下所示:In[7]:#

查看DataFrame的元素個(gè)數(shù)、維度數(shù)、形狀print('餐飲訂單信息表的元素個(gè)數(shù)為:',

order.size)print('餐飲訂單信息表的維度數(shù)為:',

order.ndim)print('餐飲訂單信息表的數(shù)據(jù)形狀

為:',

order.shape)

Out[7]:餐飲訂單信息表的元素個(gè)數(shù)為:

52801餐飲訂單信息表的維度數(shù)為:

2餐飲訂單信息表的形狀為:

(2779,

19)In[8]:#

使用字典訪問的方式取出order中的某一列order_id=

order['order_id']print('餐飲訂單信息表中的order_id的形狀為:',

order_id.shape)Out[8]:

餐飲訂單信息表中的order_id的形狀為:

(2779,)Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】DataFrame的單列數(shù)據(jù)為一個(gè)Series。根據(jù)DataFrame的定義可知,DataFrame是一個(gè)帶有標(biāo)簽的二維數(shù)組,每個(gè)標(biāo)簽相當(dāng)于每一列的列名。只要以字典訪問某一個(gè)key的值的方式使用對(duì)應(yīng)的列名,即可實(shí)現(xiàn)單列數(shù)據(jù)的訪問,除了使用字典訪問內(nèi)部數(shù)據(jù)的獲取方式外,還能以訪問屬性的方式訪問數(shù)據(jù),代碼如下所示:以上兩種方法均可以獲得DataFrame中的某一列數(shù)據(jù),但是使用訪問屬性的方法訪問數(shù)據(jù)并不建議使用。由于在多數(shù)時(shí)候數(shù)據(jù)的列名為英文,以屬性方式訪問某一列的形式和DataFrame屬性訪問,

其方法和使用的格式相同,難免存在部分列名和pandas提供的方法相同,這時(shí)候?qū)?huì)引起程序混亂,也會(huì)使得代碼晦澀難懂。當(dāng)訪問DataFrame中某一列的某幾行時(shí),單獨(dú)一列的DataFrame可以視為一個(gè)Series(另一種pandas提供的類,可以看作是只有一列的DataFrame),而訪問一個(gè)Series

的方法和訪問一個(gè)一維的ndarray的方法相同,代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】In[9]:detail_id5=

order['detail_id'][:5]print('餐飲訂單信息表中的detail_id前5個(gè)元素為:\n',

detail_id5)Out[9]:

餐飲訂單信息表中的detail_id前5個(gè)元素為:0

29561

29582

29613

29664

2968Name:detail_id,dtype:

int64Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】訪問DataFrame多列數(shù)據(jù)時(shí)可以將多個(gè)列索引名稱放入一個(gè)列表,同時(shí),訪問DataFrame多列數(shù)據(jù)中的多行數(shù)據(jù)和訪問單列數(shù)據(jù)的多行數(shù)據(jù)的方法基本相同,代碼如下所示:In[10]:order_id_detail_id=order[['order_id',

'detail_id']][:5]print('餐飲訂單信息表中的order_id和detail_id前5個(gè)元素為:\n',

order_id_detail_id)Out[10]:

餐飲訂單信息表中的order_id和detail_id前5個(gè)元素為:order_iddetail_id0417

29561417

29582417

29613417

29664417

2968Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】如果只是需要訪問DataFrame某幾行數(shù)據(jù),那么實(shí)現(xiàn)方式和上述的訪問多列多行的方式相似,選擇所有列,使用“:”代替即可,代碼如下所示:In[11]:order5=

order[:][1:6]print('餐飲訂單信息表的1~6行元素為:\n',

order5)Out[11]:

餐飲訂單信息表的1~6行元素為:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】除了使用上述方法能夠得到多行數(shù)據(jù)以外,通過DataFrame提供的方法head()和tail()也可以得到多行數(shù)據(jù),但是用這兩種方法得到的數(shù)據(jù)都是從開始或末尾獲取的連續(xù)數(shù)據(jù),代碼如下所示:In[12]:print('餐飲訂單信息表中前5行數(shù)據(jù)

為:\n',

order.head(5)

)print('餐飲訂單信息表中后5行元素為:\n',order.tail(5)

)Out[12]:餐飲訂單信息表中前5行數(shù)據(jù)為:detail_idorder_iddishes_idlogicprn_nameparent_class_name\02956417610062NaN

NaN12958417609957NaN

NaN22961417609950NaN

NaN32966417610038NaN

NaN42968417610003NaNNaNdiscount_amtdiscount_reasonkick_backadd_inpriceadd_info

bar_code0NaNNaNNaN0NaN

NaN1NaNNaNNaN0NaN

NaN2NaNNaNNaN0NaN

NaN3NaNNaNNaN0NaN

NaN4NaNNaNNaN0NaN

NaN這里head()方法和tail()方法使用的都是默認(rèn)參數(shù),所以訪問的是前、后5行。在方法后的“()”中輸入訪問行數(shù),即可實(shí)現(xiàn)目標(biāo)行數(shù)的查看。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】餐飲訂單信息表中后5行元素為:detail_idorder_iddishes_idlogicprn_name

parent_class_name\27746750774610011NaN

NaN27756742774609996NaN

NaN27766756774609949NaN

NaN27776763774610014NaN

NaN27786764774610017NaN

NaNdiscount_amtdiscount_reasonkick_backadd_inpriceadd_info

\2774NaNNaNNaN0

NaN2775NaNNaNNaN0

NaN2776NaNNaNNaN0

NaN2777NaNNaNNaN0

NaN2778NaNNaNNaN0

NaN任務(wù)3.3 利用行列索引查看餐飲訂單數(shù)據(jù)的子集1知識(shí)準(zhǔn)備2任務(wù)描述任務(wù)實(shí)施33.3

利用行列索引查看餐飲訂單數(shù)據(jù)的子集【任務(wù)描述】DataFrame的數(shù)據(jù)查看與訪問基本方法雖然能夠基本滿足數(shù)據(jù)查看要求,但是終究還是不夠靈活。pandas提供了loc()和iloc()兩種以行列索引的方法來實(shí)現(xiàn)數(shù)據(jù)訪問。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】loc()方法是針對(duì)DataFrame索引名稱的切片方法,如果傳入的不是索引名稱,那么切片操作將無法執(zhí)行。利用loc()方法,能夠?qū)崿F(xiàn)所有單層索引切片操作。loc()方法基本使用格式如下:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)DataFrame.loc[行索引名稱或條件,

列索引名稱]In[13]:order_id1=order.loc[:,'order_id']print('使用loc()方法提取order_id列的size為:',

order_id1.size)Out[13]:

使用loc()方法提取order_id列的size為:

2779loc()方法的使用如下代碼所示。【知識(shí)準(zhǔn)備】iloc()方法和local()方法的區(qū)別在于,iloc()方法接收的必須是行索引和列索引的位置。

iloc()方法基本使用格式如下:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)DataFrame.iloc[行索引位置,

列索引位置]In[14]:order_id2=order.iloc[:,3]print('使用iloc()方法提取第3列的size為:',order_id2.size)Out[14]:

使用iloc()方法提取第3列的size為:

2779iloc()方法的使用如下代碼所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用loc()方法和iloc()方法可以對(duì)DataFrame進(jìn)行多種操作。(1)單列切片,具體代碼如前述所示。(2)多列切片,其原理是將多列的列名或位置作為一個(gè)列表或數(shù)據(jù)傳入,代碼如下所示:In[15]:order_id_detail_id1=order.loc[:,['order_id',

'detail_id']]print('使用loc()方法提取order_id和detail_id列的size為:',order_id_detail_id1.size)order_id_detail_id2=order.iloc[:,[1,3]]print('使用iloc()方法提取第1和第3列的size為:',

order_id_detail_id2.size)Out[15]:

使用loc()方法提取order_id和detail_id列的size為:

5558使用iloc()方法提取第1和第3列的size為:

5558Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】(3)取出DataFrame中的任意數(shù)據(jù),代碼如下所示:In[16]:print('列名為order_id和detail_id的行名為3的數(shù)據(jù)為:\n',order.loc[3,['order_id','detail_id']])print('列名為order_id和detail_id行名為2,3,4,5,6的數(shù)據(jù)為:\n',order.loc[2:6,['order_id',

'detail_id']])print('列位置為1和3,行位置為3的數(shù)據(jù)為:\n',

order.iloc[3,

[1,3]])print('列位置為1和3,行位置為2,3,4,5,6的數(shù)據(jù)為:\n',order.iloc[2:7,[1,

3]])Out[16]:

列名為order_id和detail_id的行名為3的數(shù)據(jù)為:order_id417detail_id2966Name:3,dtype:

objectPandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】(3)取出DataFrame中的任意數(shù)據(jù),代碼如下所示:列名為order_id和detail_id行名為2,3,4,5,6的數(shù)據(jù)為:order_id

detail_id2417

29613417

29664417

29685301

18996301

1902列位置為1和3,行位置為3的數(shù)據(jù)為:order_id

417logicprn_name

NaNlogicprn_nameNaNName:3,dtype:

object列位置為1和3,行位置為2,3,4,5,6的數(shù)據(jù)為:order_id

logicprn_name2417

NaN3417

NaN4417

NaN5301

NaN6301

NaNPandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】從此段代碼中看出在使用loc()方法的時(shí)候,如果內(nèi)部傳入的行索引名稱為一個(gè)區(qū)間,那么前后均為閉區(qū)間。而使用iloc()方法時(shí),如果內(nèi)部傳入的行索引位置或列索引位置為區(qū)間,那么為前閉后開區(qū)間。loc()方法的內(nèi)部還可以傳入表達(dá)式,結(jié)果會(huì)返回滿足表達(dá)式的所有值,代碼如下所示:#

傳入表達(dá)式In[17]print('order中detail_id為“2956”的order_id為:\n',order.loc[order['detail_id']=='2956',['order_id','detail_id’]])Out[17]:order中detail_id為“2956”的order_id為:Empty

DataFrameColumns:[order_id,

detail_id]Index:

[]In[18]:print('order中detail_id為“2956”的第1、4列數(shù)據(jù)為:\n',order.iloc[order['detail_id']=='2956',[1,

4]])Out[18]:NotImplementedError:iLocationbasedbooleanindexingonanintegertype

isnot

availablePandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】iloc()方法不能接收表達(dá)式,原因在于,iloc()方法可以接收的數(shù)據(jù)類型并不包括Series。根據(jù)Series的構(gòu)成,應(yīng)取出該Series的values,代碼如下所示:In[19]:print('order中detail_id為“2956”的第1、4列數(shù)據(jù)為:\n',order.iloc[(order['detail_id']=='2956').values,[1,

4]])Out[19]:

order中detail_id為“2956”的第1、4列數(shù)據(jù)為:Empty

DataFrameColumns:[order_id,

parent_class_name]Index:

[]總體來說,loc()方法更加靈活多變,代碼的可讀性更高;iloc()方法的代碼簡(jiǎn)潔,但可讀性不高。在數(shù)據(jù)分析工作中具體使用哪一種方法,應(yīng)根據(jù)情況而定,大多數(shù)時(shí)候建議使用loc()方法。任務(wù)3.4

生成餐飲訂單數(shù)據(jù)的銷售額1知識(shí)準(zhǔn)備2任務(wù)描述任務(wù)實(shí)施33.4

生成餐飲訂單數(shù)據(jù)的銷售額【任務(wù)描述】描述性統(tǒng)計(jì)是用于概括、表述事物整體狀況,以及事物間關(guān)聯(lián)、類屬關(guān)系的統(tǒng)計(jì)方法。通過幾個(gè)統(tǒng)計(jì)值可簡(jiǎn)捷地表示一組數(shù)據(jù)的集中趨勢(shì)和離散程度等。Pandas對(duì)兩種不同的數(shù)據(jù)特征使用了不同的方法。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】數(shù)值型特征的描述性統(tǒng)計(jì)主要包括了計(jì)算數(shù)值型數(shù)據(jù)的最小值、均值、中位數(shù)、最大值、四分位數(shù)、極差、標(biāo)準(zhǔn)差、方差、協(xié)方差和變異系數(shù)等。在Numpy已經(jīng)提到了為數(shù)不少的統(tǒng)計(jì)函數(shù),為方便讀者查看,在代碼中將Numpy簡(jiǎn)寫為np ,部分統(tǒng)計(jì)函數(shù)如表3-5所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)表3-5

Numpy中的部分描述性統(tǒng)計(jì)函數(shù)函數(shù)名稱函數(shù)說明函數(shù)名稱函數(shù)說明np.min最小值np.max最大值np.mean均值np.ptp極差np.median中位數(shù)np.std標(biāo)準(zhǔn)差np.var方差np.cov協(xié)方差I(lǐng)n[20]:importnumpyasnpprint('餐飲訂單信息表中amounts的均值為:',np.mean(order['amounts’])Out[20]:

餐飲訂單信息表中amounts的均值為:

45.33717164447643pandas庫(kù)是基于Numpy庫(kù)的,自然也可以使用表中的統(tǒng)計(jì)函數(shù)對(duì)數(shù)據(jù)進(jìn)行描述性統(tǒng)計(jì)。例如,下面代碼段所示通過np.mean函數(shù)求銷售數(shù)量均值。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】In[21]:importnumpyasnpprint('餐飲訂單信息表中amounts的總值為:',np.sum(order['counts’]))Out[21]:

餐飲訂單信息表中amounts的總值為:

3088使用np.sum函數(shù)來求出銷售的總數(shù)的代碼如下所示:In[22]:print('餐飲訂單信息表中counts的總值為:',order['counts'].sum

())Out[22]:

餐飲訂單信息表中counts的總值為:

3088Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】pandas還提供了更加便利的方法來進(jìn)行數(shù)值型數(shù)據(jù)的統(tǒng)計(jì)。用np.sum現(xiàn)計(jì)算某列的總和也可以通過pandas中的方法來實(shí)現(xiàn)

,代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】作為專門為數(shù)據(jù)分析而生的Python庫(kù),pandas還提供了一個(gè)describe()方法,能夠一次性得出數(shù)據(jù)框中所有數(shù)值型特征如非空值數(shù)目,均值,四分位數(shù),標(biāo)準(zhǔn)差,最大值和最小值,實(shí)現(xiàn)過程的代碼如下所示:In[23]:print('餐飲訂單信息表counts的描述性統(tǒng)計(jì)

為:\n',order['counts'].describe())Out[23]:

餐飲訂單信息表counts的描述性統(tǒng)計(jì)為:count2779.000000mean1.111191std0.625428min1.00000025%

1.00000050%

1.00000075%1.000000max

10.000000Name:counts,dtype:

float64Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】pandas還提供了與統(tǒng)計(jì)相關(guān)的主要方法,這些方法能夠滿足絕大多數(shù)數(shù)據(jù)分析所需要的數(shù)值型特征的描述性統(tǒng)計(jì)工作,統(tǒng)計(jì)方法如表3-6所示。表3-6

pandas部分描述性統(tǒng)計(jì)函數(shù)函數(shù)名稱函數(shù)說明函數(shù)名稱函數(shù)說明min最小值max最大值mean均值ptp極差median中位數(shù)std標(biāo)準(zhǔn)差var方差cov協(xié)方差sem標(biāo)準(zhǔn)誤差mode眾數(shù)skew樣本偏度kurt樣本峰度quantile分位數(shù)count非空值數(shù)目describe描述統(tǒng)計(jì)mad平均絕對(duì)離差類別型特征的描述性統(tǒng)計(jì)描述類別型特征的分布狀況,可以使用頻數(shù)統(tǒng)計(jì)。在pandas庫(kù)中實(shí)現(xiàn)頻數(shù)統(tǒng)計(jì)的方法為value_counts()。對(duì)餐飲訂單信息表中的菜品進(jìn)行頻數(shù)統(tǒng)計(jì),代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】In[24]:print('餐飲訂單信息表dishes_name頻數(shù)統(tǒng)計(jì)結(jié)果為:\n',order['dishes_name'].value_counts())Out[24]:

餐飲訂單信息表dishes_name頻數(shù)統(tǒng)計(jì)結(jié)果為:白飯/大碗 92涼拌菠菜 77谷稻小莊 72麻辣小龍蝦 65白飯/小碗 60...三絲鱔魚

2咖啡奶香面包 2鐵板牛肉

2冰鎮(zhèn)花螺

1百里香奶油烤紅酒牛肉1Name:dishes_name,Length:145,dtype:

int64除了使用value_counts()方法分析頻率分布外,pandas提供了category類,可以使用astype()方法將目標(biāo)特征的數(shù)據(jù)類型轉(zhuǎn)換為category類型,代碼如下所示:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】In[25]:order['dishes_name']=

order['dishes_name'].astype('category')print('餐飲訂單信息表dishes_name列轉(zhuǎn)變數(shù)據(jù)類型后為:',order['dishes_name'].dtypes)

Out[25]:餐飲訂單信息表dishes_name列轉(zhuǎn)變數(shù)據(jù)類型后為:

categoryPandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】describe()方法除了支持傳統(tǒng)數(shù)值型數(shù)據(jù)以外,還能夠支持對(duì)category類型的數(shù)據(jù)進(jìn)行描述性統(tǒng)計(jì),4個(gè)統(tǒng)計(jì)量分別是列非空元素的數(shù)目,類別的數(shù)目,數(shù)目最多的類別,數(shù)目最多類別的數(shù)目,代碼如下所示:In[26]:print('餐飲訂單信息表dishes_name的描述統(tǒng)計(jì)結(jié)果為:\n',order['dishes_name'].describe())Out[26]:

餐飲訂單信息表dishes_name的描述統(tǒng)計(jì)結(jié)果為:count

2779unique

145top

白飯/大碗freq92Name:dishes_name,dtype:

object任務(wù)3.5 按給定的時(shí)間周期統(tǒng)計(jì)菜品或門店的銷售額1知識(shí)準(zhǔn)備2任務(wù)描述任務(wù)實(shí)施33.5

按給定的時(shí)間周期統(tǒng)計(jì)菜品或門店的銷售額【任務(wù)描述】數(shù)據(jù)分析的對(duì)象不止是數(shù)值型和類別型兩種。常用的數(shù)據(jù)類型還包括時(shí)間類型。通過時(shí)間類型數(shù)據(jù)能夠獲取到對(duì)應(yīng)的年月日等信息。但是時(shí)間類型的數(shù)據(jù)在python程序中常常是以字符串的形式顯示,無法直接對(duì)其進(jìn)行與時(shí)間相關(guān)的分析。Pandas庫(kù)繼承了Numpy庫(kù)中的datetime64和timedelta64模塊,能夠快速的實(shí)現(xiàn)對(duì)時(shí)間字符串的轉(zhuǎn)換、信息提取等操作。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【知識(shí)準(zhǔn)備】在多數(shù)情況下,對(duì)時(shí)間類型數(shù)據(jù)進(jìn)行分析的前提就是將原本為字符串的時(shí)間轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間。pandas繼承了Numpy庫(kù)和datetime庫(kù)的時(shí)間相關(guān)模塊,提供了6種時(shí)間相關(guān)的類如表3-7所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)表3-7

pandas中與時(shí)間相關(guān)的類函數(shù)名稱用途說明Timestamp最基礎(chǔ)的時(shí)間類。表示某個(gè)時(shí)間點(diǎn)。絕大多數(shù)的場(chǎng)景中的時(shí)間數(shù)據(jù)都是Timestamp形式Period表示某個(gè)時(shí)間段,如某一天、某一小時(shí)等Timedelta表示不同單位的時(shí)間,如1d、1.5h、3min、4s等,而非具體的某個(gè)時(shí)間段DatetimeIndex一組Timestamp構(gòu)成的Index,可以用于作為Series或DataFrame的索引PeriodtimeIndex一組Period構(gòu)成的Index,可以用于作為Series或DataFrame的索引TimedeltaIndex一組Timedelta構(gòu)成的Index,可以用于作為Series或DataFrame的索引【知識(shí)準(zhǔn)備】Timestamp是時(shí)間類中較為基礎(chǔ)的,也是較為常用的。在多數(shù)情況下,會(huì)將與時(shí)間相關(guān)的字符串轉(zhuǎn)換成為Timestamp。pandas提供的to_datetime函數(shù),能夠?qū)崿F(xiàn)這一目標(biāo)

。to_datetime()函數(shù)的基本使用格式如下:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)pandas.to_datetime(arg,errors='raise',dayfirst=False,yearfirst=False,utc=None,format=None,exact=True,unit=None,infer_datetime_format=False,origin='unix',

cache=True)【知識(shí)準(zhǔn)備】to_datetime()函數(shù)的

常用參數(shù)及其說明如表3-8所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)表3-8

to_datetime()函數(shù)的常用參數(shù)及其說明函數(shù)名稱參數(shù)說明arg接收str、int、float、list、tuple、datetime或array。表示需要轉(zhuǎn)換的時(shí)間日期對(duì)象。無默認(rèn)值errors接收“ignore”“raise”“coerce”。表示無效解析。默認(rèn)為raisedayfirst\yearfirst接收bool。表示指定日期的解析順序。默認(rèn)為FalsePandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】將餐飲訂單信息表轉(zhuǎn)換成為標(biāo)準(zhǔn)時(shí)間,代碼如下所示:In[27]:importpandasaspdorder=pd.read_table('D:\Anaconda\order1.csv',sep=',',

encoding='gbk')

#輸出轉(zhuǎn)換前的原始place_order_time列的類型print('進(jìn)行轉(zhuǎn)換前place_order_time的類型為:',order['place_order_time'].dtypes)#

使用to_datetime函數(shù)將place_order_time列的數(shù)據(jù)類型轉(zhuǎn)換成標(biāo)準(zhǔn)時(shí)間類型order['place_order_time']=

pd.to_datetime(order['place_order_time'])print('進(jìn)行轉(zhuǎn)換后place_order_time的類型為:',

order['place_order_time'].dtypes)Out[27]:進(jìn)行轉(zhuǎn)換前place_order_time的類型為:

object進(jìn)行轉(zhuǎn)換后place_order_time的類型為:

datetime64[ns]Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】除了將數(shù)據(jù)從原始DataFrame中直接轉(zhuǎn)換為Timestamp格式,還可以將數(shù)據(jù)單獨(dú)提取出來,將其轉(zhuǎn)換為DatetimeIndex格式或PeriodIndex格式。但DatetimeIndex和PeriodIndex在日常使用的過程中并無太大區(qū)別。DatetimeIndex是用于指代一系列時(shí)間點(diǎn)的一種數(shù)據(jù)結(jié)構(gòu)。PeriodIndex則是用于指代一系列時(shí)間段的數(shù)據(jù)結(jié)構(gòu)。DatetimeIndex類的基本使用格式如下:classpandas.DatetimeIndex(data=None,freq=<no_default>,tz=None,normalize=False,closed=None,ambiguous='raise',dayfirst=False,yearfirst=False,dtype=None,copy=False,name=None)DatetimeIndex可以用于轉(zhuǎn)換數(shù)據(jù),還可以用于創(chuàng)建時(shí)間序列數(shù)據(jù),常用參數(shù)及其說明如表3-9所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】表3-9

DatetimeIndex常用參數(shù)及其說明參數(shù)說明用途說明data接收類數(shù)組。表示用可選的類似日期時(shí)間的數(shù)據(jù)來構(gòu)造索引。默認(rèn)為Nonefreq接收str。表示一種pandas周期字符串或相應(yīng)的對(duì)象。無默認(rèn)值tz接收時(shí)區(qū)或str。表示設(shè)置數(shù)據(jù)的時(shí)區(qū)。默認(rèn)為Nonedtype接收np.dtype

或DatetimeTZDtype或str。表示數(shù)據(jù)類型。默認(rèn)為NonePeriodIndex類的基本使用格式如下:Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】classpandas.PeriodIndex(data=None,ordinal=None,freq=None,dtype=None,copy=False,name=None,

**fields)PeriodIndex可以用于轉(zhuǎn)換數(shù)據(jù),還可以用于創(chuàng)建時(shí)間序列數(shù)據(jù),常用參數(shù)及其說明如表3-10所示。參數(shù)說明用途說明data接收類數(shù)組。表示用可選的類似周期的數(shù)據(jù)來構(gòu)造索引。默認(rèn)為Nonefreq接收str。表示一種pandas周期字符串或相應(yīng)的對(duì)象。默認(rèn)為Nonedtype接收str或PeriodDtype。表示數(shù)據(jù)類型。默認(rèn)為None表格3-10

PeriodIndex常用參數(shù)及其說明Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】將時(shí)間字符串轉(zhuǎn)換為DatetimeIndex

和PeriodIndex類型,代碼如下所示:In[28]:#將place_order_time列數(shù)據(jù)格式轉(zhuǎn)換成DateimeIndex格式datetimeIndex=

pd.DatetimeIndex(order['place_order_time'])print('轉(zhuǎn)換為DateimeIndex后數(shù)據(jù)的類型為:\n',

type(datetimeIndex))#將place_order_time列數(shù)據(jù)格式轉(zhuǎn)換成PeriodIndex格式periodIndex=pd.PeriodIndex(order['place_order_time'],

freq='S')print('轉(zhuǎn)換為PeriodIndex后數(shù)據(jù)的類型為:\n',type(periodIndex))

Out[28]:轉(zhuǎn)換為place_order_timetimeIndex后數(shù)據(jù)的類型為:<class'pandas.core.indexes.datetimes.DatetimeIndex'>轉(zhuǎn)換為PeriodIndex后數(shù)據(jù)的類型為:<class'pandas.core.indexes.period.PeriodIndex'>1提取時(shí)間序列數(shù)據(jù)信息在多數(shù)涉及與時(shí)間相關(guān)的數(shù)據(jù)處理、統(tǒng)計(jì)分析的過程中,都需要提取時(shí)間中的年份、月份等數(shù)據(jù)。使用對(duì)應(yīng)的Timestamp類屬性就能夠?qū)崿F(xiàn)這一目的,其常用類屬性及說明如表3-11所示。Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】屬性名稱屬性說明屬性名稱屬性說明year年week星期Month月quarter季節(jié)day天weekofyear一年中第幾周date日期dayofyear一年中的第幾天hour分鐘dayofweek一周第幾天minute秒weekday一周第幾天second表格日期3-11

Timestamp類屬is_性le及ap說_y明ear是否閏年P(guān)andas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】Python列表推導(dǎo)式(快速生成一個(gè)滿足需求的列表,其語法格式為:[表達(dá)式for

迭代器變量

in可迭代對(duì)象[if條件表達(dá)式]]),可以實(shí)習(xí)對(duì)DataFrame某一列信息數(shù)據(jù)的讀取。比如提取餐飲訂單信息表中place_order_time時(shí)間的年份、月份、日期,代碼如下所示。In[29]:year1=[i.yearforiin

order['place_order_time']]print('place_order_time中的年份數(shù)據(jù)前5個(gè)為:',

year1[:5])month1=[i.monthforiinorder['place_order_time']]print('place_order_time中的月份數(shù)據(jù)前5個(gè)為:',month1[:5])day1=[i.dayforiin

order['place_order_time']]print('place_order_time中的日期數(shù)據(jù)前5個(gè)為:',day1[:5])Out[29]:

place_order_time中的年份前5個(gè)為:[2016,2016,2016,2016,2016]place_order_time中的月份數(shù)據(jù)前5個(gè)為:

[8,

8,

8,

8,

8]place_order_time中的日期數(shù)據(jù)前5個(gè)為:

[1,1,1,1,1]2加減時(shí)間數(shù)據(jù)時(shí)間數(shù)據(jù)的算術(shù)運(yùn)算在現(xiàn)實(shí)中隨處可見,例如,2020年1月1日減一天就是2019年12月31日。pandas的時(shí)間數(shù)據(jù)和現(xiàn)實(shí)生活中的時(shí)間數(shù)據(jù)一樣可以做運(yùn)算。這時(shí)就涉及pandas的Timedelta類。Timedelta是時(shí)間相關(guān)類中的一個(gè)異類,不僅能夠使用正數(shù),還能夠使用負(fù)數(shù)表示單位時(shí)間,如1s、2min、3h等。使用Timedelta類,配合常規(guī)的時(shí)間相關(guān)類能夠輕松實(shí)現(xiàn)時(shí)間的算術(shù)運(yùn)算。目前,在Timedelta類的時(shí)間周期中沒有年和月,所有周期名稱、對(duì)應(yīng)單位及其說明如表3-12所示。(注:這里單位采用的是程序定義的符合,可能與標(biāo)準(zhǔn)單位符號(hào)不一致)Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】表3-12

Timedelta類的時(shí)間周期名稱對(duì)應(yīng)單位及其說明周期名稱單位說明周期名稱單位說明weeks無星期daysD天數(shù)hoursh小時(shí)minutesm分secondss秒millisecondsms毫秒microsecondsus微秒nanosecondsns納秒Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用Timedelta類,可以實(shí)現(xiàn)在某一個(gè)時(shí)間上加減一段時(shí)間,實(shí)現(xiàn)數(shù)據(jù)的加減運(yùn)算的代碼如下所示:In[30]:#

將place_order_time數(shù)據(jù)向后平移一天time1=order['place_order_time']+pd.Timedelta(days=1)print('place_order_time加上一天前前5行數(shù)據(jù)為:\n',order['place_order_time'][:5])print('place_order_time加上一天后前5行數(shù)據(jù)為:\n',

time1[:5])Out[30]:

place_order_time加上一天前前5行數(shù)據(jù)為:02016-08-01

11:05:0012016-08-01

11:07:0022016-08-01

11:07:0032016-08-01

11:11:0042016-08-01

11:11:00Name:place_order_time,dtype:

datetime64[ns]place_order_time加上一天后前5行數(shù)據(jù)為:0

2016-08-02

11:05:0012016-08-02

11:07:0022016-08-02

11:07:0032016-08-02

11:11:0042016-08-02

11:11:00Name:place_order_time,dtype:

datetime64[ns]Pandas統(tǒng)計(jì)分析實(shí)戰(zhàn)【任務(wù)實(shí)施】使用Timedelta類可以將兩個(gè)時(shí)間序列相減,從而得到一個(gè)Timedelta對(duì)象,代碼如下所示:In[31]:#

將place_order_time數(shù)據(jù)與指定的時(shí)間數(shù)據(jù)進(jìn)行相減timeDelta=order['place_order_time']-

pd.to_datetime('2020-1-1')print('place_order_time減去2020年1月1日0點(diǎn)0時(shí)0分后的數(shù)據(jù):\n',timeDelta[:5])print('place_order_time減去time1后的數(shù)據(jù)類型為:',timeDelta.dtypes)Out[31]:place_order_time減去2020年1月1日0點(diǎn)0時(shí)0分后的數(shù)據(jù):0-1248days+11:05:001-1248days

+11:07:002-1248days

+11:07:003-1248

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論