Python數(shù)據(jù)分析與實戰(zhàn)(微課版)課件 第3、4章 pandas統(tǒng)計分析基礎;使用pandas進行數(shù)據(jù)預處理_第1頁
Python數(shù)據(jù)分析與實戰(zhàn)(微課版)課件 第3、4章 pandas統(tǒng)計分析基礎;使用pandas進行數(shù)據(jù)預處理_第2頁
Python數(shù)據(jù)分析與實戰(zhàn)(微課版)課件 第3、4章 pandas統(tǒng)計分析基礎;使用pandas進行數(shù)據(jù)預處理_第3頁
Python數(shù)據(jù)分析與實戰(zhàn)(微課版)課件 第3、4章 pandas統(tǒng)計分析基礎;使用pandas進行數(shù)據(jù)預處理_第4頁
Python數(shù)據(jù)分析與實戰(zhàn)(微課版)課件 第3、4章 pandas統(tǒng)計分析基礎;使用pandas進行數(shù)據(jù)預處理_第5頁
已閱讀5頁,還剩108頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

pandas統(tǒng)計分析基礎1DataFrame的常用操作目錄讀/寫不同數(shù)據(jù)源的數(shù)據(jù)2轉換與處理時間序列數(shù)據(jù)3使用分組聚合進行組內(nèi)計算4pandas是Python的核心數(shù)據(jù)分析支持庫,提供了快速、靈活、明確的數(shù)據(jù)結構,旨在簡單、直觀地處理關系型、標記型數(shù)據(jù)。pandas建造在NumPy之上,所以使得pandas在以NumPy為中心的應用中得以容易的使用,而pandas庫在與其它第三方科學計算支持庫結合時也能夠完美的進行集成。在Python中,pandas庫的功能十分強大,它可提供高性能的矩陣運算。可用于數(shù)據(jù)挖掘和數(shù)據(jù)分析,同時也提供數(shù)據(jù)清洗功能;支持類似SQL的數(shù)據(jù)增、刪、查、改等操作,并且?guī)в胸S富的數(shù)據(jù)處理函數(shù);支持時間序列數(shù)據(jù)分析功能;支持靈活處理缺失數(shù)據(jù)等。認識pandas庫pandas有兩個強大的利器。Series(一維數(shù)據(jù))是一種類似于一維數(shù)組的對象,是由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成,而僅由一組數(shù)據(jù)也可產(chǎn)生簡單的Series對象。DataFrame是pandas中的一個表格型的數(shù)據(jù)結構,包含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾型等),DataFrame既有行索引也有列索引,可以被看做是由Series組成的字典。認識pandas庫文本文件是一種由若干行字符構成的計算機文件,它是一種典型的順序文件。CSV是一種用分隔符分隔的文件格式,因為其分隔符不一定是逗號,所以又被稱為字符分隔文件。文本文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本),它是一種通用、相對簡單的文件格式,較廣泛地應用是在程序之間轉移表格數(shù)據(jù),而這些程序本身是在其他程序不兼容的格式上進行操作的(往往是私有的、無通用規(guī)范的格式)。大量程序都支持CSV或其變體,所以CSV或其變體可以作為大多數(shù)程序的輸入和輸出格式。讀/寫文本文件CSV文件根據(jù)其定義也是一種文本文件。在數(shù)據(jù)讀取過程中可以使用文本文件的讀取函數(shù)對CSV文件進行讀取。同時,如果文本文件是字符分隔文件,那么可以使用讀取CSV文件的函數(shù)進行讀取。pandas提供了read_table()函數(shù)讀取文本文件,提供了read_csv()函數(shù)讀取CSV文件。讀/寫文本文件1.文本文件讀取read_table()函數(shù)和read_csv()函數(shù)具有許多參數(shù),如果有多個<expression>,那么表達式之間用逗號隔開,基本使用格式如下。讀/寫文本文件pandas.read_table(filepath_or_buffer,*,sep=_NoDefault.no_default,delimiter=None,header='infer',names=_NoDefault.no_default,index_col=None,usecols=None,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,skipfooter=0,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=_NoDefault.no_default,skip_blank_lines=True,parse_dates=False,infer_datetime_format=_NoDefault.no_default,keep_date_col=_NoDefault.no_default,date_parser=_NoDefault.no_default,date_format=None,dayfirst=False,cache_dates=True,iterator=False,chunksize=None,compression='infer',thousands=None,decimal='.',lineterminator=None,quotechar='"',quoting=0,doublequote=True,escapechar=None,comment=None,encoding=None,encoding_errors='strict',dialect=None,on_bad_lines='error',delim_whitespace=_NoDefault.no_default,low_memory=True,memory_map=False,float_precision=None,storage_options=None,dtype_backend=_NoDefault.no_default)讀/寫文本文件pandas.read_csv(filepath_or_buffer,*,sep=_NoDefault.no_default,delimiter=None,header='infer',names=_NoDefault.no_default,index_col=None,usecols=None,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,skipfooter=0,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=_NoDefault.no_default,skip_blank_lines=True,parse_dates=None,infer_datetime_format=_NoDefault.no_default,keep_date_col=_NoDefault.no_default,date_parser=_NoDefault.no_default,date_format=None,dayfirst=False,cache_dates=True,iterator=False,chunksize=None,compression='infer',thousands=None,decimal='.',lineterminator=None,quotechar='"',quoting=0,doublequote=True,escapechar=None,comment=None,encoding=None,encoding_errors='strict',dialect=None,on_bad_lines='error',delim_whitespace=_NoDefault.no_default,low_memory=True,memory_map=False,float_precision=None,storage_options=None,dtype_backend=_NoDefault.no_default)read_table()函數(shù)和read_csv()函數(shù)的多數(shù)參數(shù)相同,它們的常用參數(shù)及其說明如下表。讀/寫文本文件參數(shù)名稱參數(shù)說明filepath_or_buffer接收str。表示文件路徑。無默認值sep接收str。表示分隔符。read_csv函數(shù)默認為“,”,read_table函數(shù)默認為制表符“Tab”header接收int或列表形式的int。表示將某行數(shù)據(jù)作為列名。默認為infernames接收array。表示列名。無默認值index_col接收int、sequence或False。表示索引列的位置,取值為sequence則代表多重索引。默認為Noneread_table()函數(shù)和read_csv()函數(shù)的多數(shù)參數(shù)相同,它們的常用參數(shù)及其說明如下表。讀/寫文本文件參數(shù)名稱參數(shù)說明dtype接收字典形式的列名或type_name。表示寫入的數(shù)據(jù)類型(列名為key,數(shù)據(jù)格式為values)。默認為Noneengine接收c語言或python語言。表示要使用的數(shù)據(jù)解析引擎。默認為Nonenrows接收int。要讀取的文件行數(shù)。默認為Noneskiprows接收list或int或callable。表示讀取數(shù)據(jù)時跳過開頭的行數(shù)。默認為None堅持把發(fā)展經(jīng)濟的著力點放在實體經(jīng)濟上,推進新型工業(yè)化,加快建設制造強國。某公司收集了工業(yè)制品銷售數(shù)據(jù)信息,部分信息如下表。讀/寫文本文件商品ID商品類別訂單時間銷售量/個銷售價格/元10004328類別A2023/3/114:51314710000346類別A2023/3/94:16823910001192類別A2023/3/822:2145310003708類別A2023/2/251:22343根據(jù)工業(yè)制品銷售數(shù)據(jù)表,分別使用read_table()和read_csv()這兩個函數(shù)讀取數(shù)據(jù)。read_table()函數(shù)和read_csv()函數(shù)應注意。sep參數(shù)是指定文本的分隔符,如果分隔符指定錯誤,那么在讀取數(shù)據(jù)的時候,每一行數(shù)據(jù)將連成一片。header參數(shù)用于指定列名,如果header參數(shù)值是None,那么將會添加一個默認的列名。encoding代表文件的編碼格式,常用的編碼格式有UTF-8、UTF-16、GBK、GB2312、GB18030等。如果編碼格式指定錯誤,那么數(shù)據(jù)將無法讀取,IPython解釋器會報解析錯誤。讀/寫文本文件文本文件的存儲和讀取類似,對于結構化數(shù)據(jù),可以通過pandas庫中的to_csv()方法實現(xiàn)以CSV文件格式存儲。to_csv()函數(shù)同樣具有許多參數(shù),如果有多個<expression>,那么表達式之間用逗號隔開,基本使用格式如下。讀/寫文本文件2.文本文件存儲DataFrame.to_csv(path_or_buf=None,sep=',',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,mode='w',encoding=None,compression='infer',quoting=None,quotechar='"',line_terminator=None,chunksize=None,date_format=None,doublequote=True,escapechar=None,decimal='.',errors='strict',storage_options=None)to_csv()方法的常用參數(shù)及其說明如下表。讀/寫文本文件參數(shù)名稱參數(shù)說明path_or_buf接收str。表示文件路徑。默認為Nonesep接收str。表示分隔符。默認為“,”na_rep接收str。表示缺失值。默認為“”columns接收list。表示寫出的列名。默認為Noneheader接收bool或列表形式的str。表示是否將列名寫出。默認為Trueindex接收bool。表示是否將行名(索引)寫出。默認為Trueindex_label接收sequence或str或false。表示索引名。默認為Nonemode接收特定str。表示數(shù)據(jù)寫入模式。默認為wencoding接收特定str。表示存儲文件的編碼格式。默認為NoneExcel是微軟公司的辦公軟件MicrosoftOffice的組件之一,它可以對數(shù)據(jù)進行處理、統(tǒng)計分析等操作,廣泛地應用于管理、財經(jīng)和金融等眾多領域,其文件擴展名依照程序版本的不同分為以下兩種。MicrosoftOfficeExcel2007之前的版本(不包括2007)默認保存的文件擴展名為.xls。MicrosoftOfficeExcel2007之后的版本默認保存的文件擴展名為.xlsx。讀/寫Excel文件pandas庫提供了read_excel()函數(shù)讀取“xls”和“xlsx”兩種Excel文件,基本使用格式如下。讀/寫Excel文件1.Excel文件讀取pandas.read_excel(io,sheet_name=0,*,header=0,names=None,index_col=None,usecols=None,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,parse_dates=False,date_parser=_NoDefault.no_default,date_format=None,thousands=None,decimal='.',comment=None,skipfooter=0,storage_options=None,dtype_backend=_NoDefault.no_default,engine_kwargs=None)read_excel()函數(shù)的常用參數(shù)及其說明如下表。讀/寫Excel文件參數(shù)名稱參數(shù)說明io接收str。表示文件路徑。無默認值sheet_name接收str、int、list或None。表示Excel表內(nèi)數(shù)據(jù)的分表位置。默認為0header接收int或列表形式的int。表示將某行數(shù)據(jù)作為列名。如果傳遞整數(shù)列表,那么行位置將合并為MultiIndex。如果沒有表頭,那么使用None。默認為0names接收array。表示要使用的列名列表。默認為Noneindex_col接收int或列表形式的int。表示將列索引用作dataframe的行索引。默認為Nonedtype接收dict。表示寫入的數(shù)據(jù)類型(列名為key,數(shù)據(jù)格式為values)。默認為Noneskiprows接收list、int或callable。表示讀取數(shù)據(jù)開頭跳過的行數(shù)。默認為None將數(shù)據(jù)存儲至Excel,可以使用to_excel()方法,基本使用格式如下。讀/寫Excel文件2.Excel文件存儲DataFrame.to_excel(excel_writer,*,sheet_name='Sheet1',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,startrow=0,startcol=0,engine=None,merge_cells=True,inf_rep='inf',freeze_panes=None,storage_options=None,engine_kwargs=None)to_excel()函數(shù)的常用參數(shù)及其說明如下表。讀/寫Excel文件參數(shù)名稱參數(shù)說明excel_writer接收str。表示文件路徑。無默認值sheet_name接收str。表示Excel文件中工作簿的名稱。默認為Sheet1na_rep接收str。表示缺失值。默認為“”columns接收列表形式的str或sequence。表示寫出的列名。默認為Noneheader接收bool或列表形式的str。表示是否將列名寫出。默認為Trueindex接收bool。表示是否將行名(索引)寫出。默認為Trueindex_label接收sequence或str。表示索引名。默認為None在生產(chǎn)環(huán)境中,絕大多數(shù)的數(shù)據(jù)都存儲在數(shù)據(jù)庫中。pandas庫提供了讀取與存儲關系型數(shù)據(jù)庫數(shù)據(jù)的函數(shù)與方法。除了pandas庫外,還需要使用SQLAlchemy庫建立對應的數(shù)據(jù)庫連接。pandas支持MySQL、postgresql、Oracle、SQLServer和SQLite等主流數(shù)據(jù)庫。SQLAlchemy是配合相應數(shù)據(jù)庫的Python連接工具。MySQL數(shù)據(jù)庫需要安裝mysqlclient或pymysql庫。Oracle數(shù)據(jù)庫需要安裝cx_oracle庫。使用create_engine()函數(shù),建立一個數(shù)據(jù)庫連接。下面將以MySQL數(shù)據(jù)庫為例,介紹pandas數(shù)據(jù)庫數(shù)據(jù)的讀取與存儲。讀/寫數(shù)據(jù)庫數(shù)據(jù)pandas可實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的讀取,但前提是讀者在進行讀取操作前確保已安裝數(shù)據(jù)庫,并且數(shù)據(jù)庫可以正常打開及使用。進行數(shù)據(jù)庫的讀取可利用3種函數(shù)進行操作。read_sql_table()函數(shù)只能讀取數(shù)據(jù)庫的某一個表格,不能實現(xiàn)查詢的操作。read_sql_query()函數(shù)則只能實現(xiàn)查詢操作,不能直接讀取數(shù)據(jù)庫中的某個表。read_sql()函數(shù)是兩者的綜合,既能夠讀取數(shù)據(jù)庫中的某一個表,也能夠實現(xiàn)查詢操作。讀/寫數(shù)據(jù)庫數(shù)據(jù)1.數(shù)據(jù)庫數(shù)據(jù)讀取read_sql_table()函數(shù)、read_sql_query()函數(shù)和read_sql()函數(shù)具有許多參數(shù),參數(shù)的表達式之間用逗號隔開,基本使用格式如下。讀/寫數(shù)據(jù)庫數(shù)據(jù)pandas.read_sql_table(table_name,con,schema=None,index_col=None,coerce_float=True,parse_dates=None,columns=None,chunksize=None,dtype_backend=_NoDefault.no_default)pandas.read_sql_query(sql,con,index_col=None,coerce_float=True,params=None,parse_dates=None,chunksize=None,dtype=None,dtype_backend=_NoDefault.no_default)pandas.read_sql(sql,con,index_col=None,coerce_float=True,params=None,parse_dates=None,columns=None,chunksize=None,dtype_backend=_NoDefault.no_default,dtype=None)read_sql_table()、read_sql_query()和read_sql()這3個數(shù)據(jù)庫數(shù)據(jù)讀取函數(shù)的參數(shù)幾乎完全一致,唯一的區(qū)別在于傳入的是語句還是表名。3個函數(shù)的參數(shù)及其說明如下表。讀/寫數(shù)據(jù)庫數(shù)據(jù)參數(shù)名稱參數(shù)說明sqlortable_name接收str。表示讀取的數(shù)據(jù)的表名或SQL語句。無默認值con接收數(shù)據(jù)庫連接或str。表示數(shù)據(jù)庫連接信息。無默認值index_col接收str或列表形式的str。表示列設置為索引。默認為Nonecoerce_float接收bool。表示嘗試將非字符串、非數(shù)字對象(如十進制)的值轉換為浮點。默認為Truecolumns接收list。表示要從SQL表中選擇的列名列表。默認為None在讀取數(shù)據(jù)庫數(shù)據(jù)前,需要先創(chuàng)建數(shù)據(jù)庫連接。Python提供了SQLAlchemy庫的create_engine函數(shù)用于創(chuàng)建數(shù)據(jù)庫連接,在creat_engine函數(shù)中輸入的是一個連接字符串。在使用Python的SQLAlchemy時,MySQL和Oracle數(shù)據(jù)庫連接字符串的格式如下。讀/寫數(shù)據(jù)庫數(shù)據(jù)數(shù)據(jù)庫產(chǎn)品名+連接工具名://用戶名:密碼@數(shù)據(jù)庫IP地址:數(shù)據(jù)庫端口號/數(shù)據(jù)庫名稱?charset=數(shù)據(jù)庫數(shù)據(jù)編碼格式將DataFrame寫入數(shù)據(jù)庫中,同樣也要依賴SQLAlchemy庫的create_engine函數(shù)創(chuàng)建數(shù)據(jù)庫連接。數(shù)據(jù)庫數(shù)據(jù)讀取有3個函數(shù),但數(shù)據(jù)存儲則只有一個to_sql()方法。to_sql()方法的基本使用格式如下。讀/寫數(shù)據(jù)庫數(shù)據(jù)2.數(shù)據(jù)庫數(shù)據(jù)存儲DataFrame.to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,chunksize=None,dtype=None,method=None)to_sql()函數(shù)的常用參數(shù)及其說明如下表。讀/寫Excel文件參數(shù)名稱參數(shù)說明name接收str。表示數(shù)據(jù)庫表名。無默認值con接收數(shù)據(jù)庫連接。表示數(shù)據(jù)庫連接信息。無默認值if_exists接收str。表示對表進行操作的方式,可選“fail”“replace”“append”。fail表示如果表名存在,那么不執(zhí)行寫入操作;replace表示如果表名存在,那么將原數(shù)據(jù)庫表刪除,再重新創(chuàng)建;append則表示在原數(shù)據(jù)庫表的基礎上追加數(shù)據(jù)。默認為failindex接收bool。表示是否將DataFrame索引寫入列并使用index_Label作為表中的列名。默認為Trueindex_label接收str或sequence。表示索引列的列標簽。如果沒有給定(默認)且索引為True,那么使用索引名稱。如果DataFrame使用MultiIndex,那么應該給出序列。默認為Nonedtype接收dict或scalar。表示指定列的數(shù)據(jù)類型。默認為None1DataFrame的常用操作目錄讀/寫不同數(shù)據(jù)源的數(shù)據(jù)2轉換與處理時間序列數(shù)據(jù)3使用分組聚合進行組內(nèi)計算4DataFrame的基礎屬性如下。values,可以獲取元素;index,可以獲取索引;column,可以獲取列名;dtypes,可以獲取數(shù)據(jù)類型。除了上述4個基本屬性外,還可以通過size、ndim和shape屬性獲取DataFrame的元素個數(shù)、維度數(shù)和數(shù)據(jù)形狀(行列數(shù)目)。T屬性能夠實現(xiàn)DataFrame的轉置(行列轉換)。在某些特殊場景下,某些函數(shù)或方法只能作用于列或行,此時即可試著用轉置來解決這一問題。查看DataFrame的常用屬性學習過數(shù)據(jù)庫相關知識的讀者都知道,在數(shù)據(jù)庫中最常使用的操作為查改增刪。DataFrame作為一種二維數(shù)據(jù)表結構,能夠像數(shù)據(jù)庫一樣實現(xiàn)查改增刪操作,如添加一行、刪除一行、添加一列、刪除一列、修改某一個值、某個區(qū)間的值替換等。查看訪問DataFrame中的數(shù)據(jù)除了可以使用基本的查看方式查看訪問DataFrame中的數(shù)據(jù)之外,還可以通過loc()方法和iloc()方法進行訪問。(1)DataFrame數(shù)據(jù)的基本查看方式DataFrame的單列數(shù)據(jù)為一個Series。根據(jù)DataFrame的定義可知,DataFrame是一個帶有標簽的二維數(shù)組,每個標簽相當于每一列的列名。只要以字典訪問某一個key的值的方式使用對應的列名,即可實現(xiàn)對單列數(shù)據(jù)的訪問當訪問DataFrame數(shù)據(jù)中某一列的某幾行數(shù)據(jù)時,單獨一列的DataFrame可以視為一個Series,而訪問Series基本和訪問一維的ndarray相同。查改增刪DataFrame數(shù)據(jù)訪問DataFrame多列數(shù)據(jù)時可以將多個列索引名稱放入一個列表,同時,訪問DataFrame多列數(shù)據(jù)中的多行數(shù)據(jù)和訪問單列數(shù)據(jù)的多行數(shù)據(jù)的方法基本相同。如果只是需要訪問DataFrame某幾行數(shù)據(jù),那么實現(xiàn)方式和上述的訪問多列多行的方式相似,選擇所有列,使用“:”代替即可。除了使用上述方法能夠得到多行數(shù)據(jù)以外,通過DataFrame提供的方法head()和tail()也可以得到多行數(shù)據(jù),但是用這兩種方法得到的數(shù)據(jù)都是從開始或末尾獲取的連續(xù)數(shù)據(jù)。head()方法和tail()方法使用的都是默認參數(shù),所以訪問的是前、后5行。在方法后的“()”中輸入訪問行數(shù),即可實現(xiàn)目標行數(shù)的查看。查改增刪DataFrame數(shù)據(jù)DataFrame的數(shù)據(jù)查看與訪問基本方法雖然能夠基本滿足數(shù)據(jù)查看要求,但是終究還是不夠靈活。pandas提供了loc()和iloc()兩種更加靈活的方法來實現(xiàn)數(shù)據(jù)訪問。loc()方法是針對DataFrame索引名稱的切片方法,如果傳入的不是索引名稱,那么切片操作將無法執(zhí)行。利用loc()方法,能夠實現(xiàn)對所有單層索引的切片操作。iloc()方法接收的必須是行索引和列索引的位置。查改增刪DataFrame數(shù)據(jù)(2)DataFrame的loc、iloc訪問方式loc()方法和iloc()方法基本使用格式如下。查改增刪DataFrame數(shù)據(jù)DataFrame.loc[行索引名稱或條件,列索引名稱]DataFrame.iloc[行索引位置,列索引位置]使用loc()方法和iloc()方法可以對DataFrame進行多種操作。單列切片。多列切片,其原理是將多列的列名或位置作為一個列表或數(shù)據(jù)傳入。取出DataFrame中的任意數(shù)據(jù)。在使用loc()方法的時候,如果內(nèi)部傳入的行索引名稱為一個區(qū)間,那么前后均為閉區(qū)間。而使用iloc()方法時,如果內(nèi)部傳入的行索引位置或列索引位置為區(qū)間,那么為前閉后開區(qū)間。查改增刪DataFrame數(shù)據(jù)loc()方法的內(nèi)部還可以傳入表達式,結果會返回滿足表達式的所有值。iloc()方法不能接收表達式,原因在于,iloc()方法可以接收的數(shù)據(jù)類型并不包括Series。根據(jù)Series的構成,應取出該Series的values。總體來說,loc()方法更加靈活多變,代碼的可讀性更高;iloc()方法的代碼簡潔,但可讀性不高。在數(shù)據(jù)分析工作中具體使用哪一種方法,應根據(jù)情況而定,大多數(shù)時候建議使用loc()方法。查改增刪DataFrame數(shù)據(jù)更改DataFrame中的數(shù)據(jù)的原理是將這部分數(shù)據(jù)提取出來,重新賦值為新的數(shù)據(jù)。需要注意的是,數(shù)據(jù)更改是直接對DataFrame原數(shù)據(jù)更改,操作無法撤銷。如果不希望直接對原數(shù)據(jù)做出更改,那么需要對更改條件進行確認或對數(shù)據(jù)進行備份。查改增刪DataFrame數(shù)據(jù)2.更改DataFrame中的數(shù)據(jù)為DataFrame添加一列數(shù)據(jù)的方法非常簡單,只需要新建一個列索引,并對該索引下的數(shù)據(jù)進行賦值操作即可。如果新增的一列值是相同的,那么可以直接為其賦值一個常量。查改增刪DataFrame數(shù)據(jù)3.為DataFrame增添數(shù)據(jù)刪除某列或某行數(shù)據(jù)需要用到pandas提供的方法drop()。drop()方法的基本使用格式如下。查改增刪DataFrame數(shù)據(jù)4.刪除某列或某行數(shù)據(jù)DataFrame.drop(labels=None,*,axis=0,index=None,columns=None,level=None,inplace=False,errors='raise')drop()函數(shù)的常用參數(shù)及其說明如下表。刪除某行數(shù)據(jù),只需要將drop()方法參數(shù)中的“l(fā)abels”參數(shù)換成對應的行索引,將“axis”參數(shù)設置為0即可。查改增刪DataFrame數(shù)據(jù)參數(shù)名稱參數(shù)說明labels接收單一標簽。表示要刪除的列或行的索引。默認值為Noneaxis接收0或1。表示操作的軸向。默認為0inplace接收bool。表示操作是否對原數(shù)據(jù)生效。默認為False描述性統(tǒng)計是用于概括、表述事物整體狀況,以及事物間關聯(lián)、類屬關系的統(tǒng)計方法。通過幾個統(tǒng)計值可簡捷地表示一組數(shù)據(jù)的集中趨勢和離散程度等。數(shù)值型特征的描述性統(tǒng)計數(shù)值型特征的描述性統(tǒng)計主要包括了計算數(shù)值型數(shù)據(jù)的最小值、均值、中位數(shù)、最大值、四分位數(shù)、極差、標準差、方差、協(xié)方差和變異系數(shù)等。描述分析DataFrame數(shù)據(jù)在NumPy庫中已經(jīng)提到了為數(shù)不少的統(tǒng)計函數(shù),為方便讀者查看,將NumPy庫簡寫為np,部分統(tǒng)計函數(shù)如下表。pandas庫是基于NumPy庫的,自然也可以使用表中的統(tǒng)計函數(shù)對數(shù)據(jù)進行描述性統(tǒng)計。描述分析DataFrame數(shù)據(jù)函數(shù)名稱參數(shù)說明函數(shù)名稱函數(shù)說明np.min最小值np.max最大值np.mean均值np.ptp極差np.median中位數(shù)np.std標準差np.var方差np.cov協(xié)方差pandas還提供了更加便利的方法來進行數(shù)值型數(shù)據(jù)的統(tǒng)計。用np.mean函數(shù)實現(xiàn)計算某列的均值,也可以通過pandas實現(xiàn)。作為專門為數(shù)據(jù)分析而生的Python庫,pandas還提供了一個describe()方法,能夠一次性得出數(shù)據(jù)框中所有數(shù)值型特征如下。非空值數(shù)目。均值。四分位數(shù)。標準差。最大值和最小值。描述分析DataFrame數(shù)據(jù)pandas還提供了與統(tǒng)計相關的主要函數(shù),這些函數(shù)能夠滿足絕大多數(shù)數(shù)據(jù)分析所需要的數(shù)值型特征的描述性統(tǒng)計工作,統(tǒng)計方法如下表。描述分析DataFrame數(shù)據(jù)函數(shù)名稱參數(shù)說明函數(shù)名稱函數(shù)說明min最小值max最大值mean均值ptp極差median中位數(shù)std標準差var方差cov協(xié)方差sem標準誤差mode眾數(shù)skew樣本偏度kurt樣本峰度quantile分位數(shù)count非空值數(shù)目describe描述統(tǒng)計mad平均絕對離差描述類別型特征的分布狀況,可以使用頻數(shù)統(tǒng)計。在pandas庫中實現(xiàn)頻數(shù)統(tǒng)計的方法為value_counts()。除了使用value_counts()方法分析頻率分布外,pandas提供了category類,可以使用astype()方法將目標特征的數(shù)據(jù)類型轉換為category類型。describe()方法除了支持傳統(tǒng)數(shù)值型數(shù)據(jù)以外,還能夠支持對category類型的數(shù)據(jù)進行描述性統(tǒng)計,4個統(tǒng)計量如下。列非空元素的數(shù)目。類別的數(shù)目。數(shù)目最多的類別。數(shù)目最多類別的數(shù)目。描述分析DataFrame數(shù)據(jù)2.類別型特征的描述性統(tǒng)計1DataFrame的常用操作目錄讀/寫不同數(shù)據(jù)源的數(shù)據(jù)2轉換與處理時間序列數(shù)據(jù)3使用分組聚合進行組內(nèi)計算4在多數(shù)情況下,對時間類型數(shù)據(jù)進行分析的前提就是將原本為字符串的時間轉換為標準時間。pandas繼承了NumPy庫和datetime庫的時間相關模塊,提供了6種時間相關的類如下表。轉換字符串時間為標準時間函數(shù)名稱參數(shù)說明Timestamp最基礎的時間類。表示某個時間點。絕大多數(shù)的場景中的時間數(shù)據(jù)都是Timestamp形式Period表示某個時間段,如某一天、某一小時等Timedelta表示不同單位的時間,如1d、1.5h、3min、4s等,而非具體的某個時間段DatetimeIndex一組Timestamp構成的Index,可以用于作為Series或DataFrame的索引PeriodIndex一組Period構成的Index,可以用于作為Series或DataFrame的索引TimedeltaIndex一組Timedelta構成的Index,可以用于作為Series或DataFrame的索引Timestamp是時間類中較為基礎的,也是較為常用的。在多數(shù)情況下,會將與時間相關的字符串轉換成為Timestamp。pandas提供的to_datetime函數(shù),能夠實現(xiàn)這一目標。to_datetime函數(shù)的基本使用格式如下。轉換字符串時間為標準時間pandas.to_datetime(arg,errors='raise',dayfirst=False,yearfirst=False,utc=False,format=None,exact=_NoDefault.no_default,unit=None,infer_datetime_format=_NoDefault.no_default,origin='unix',cache=True)to_datetime()函數(shù)的常用參數(shù)及其說明如下表。轉換字符串時間為標準時間函數(shù)名稱參數(shù)說明arg接收str、int、float、list、tuple、datetime或array。表示需要轉換的時間日期對象。無默認值errors接收“ignore”“raise”“coerce”。表示無效解析。默認為raisedayfirst\yearfirst接收bool。表示指定日期的解析順序。默認為False值得注意的是,Timestamp類型的時間是有限制的,在作者計算機中最早只能夠表示至1677年9月21日,最晚只能表示至2262年4月11日。除了將數(shù)據(jù)從原始DataFrame中直接轉換為Timestamp類型外,還可以將數(shù)據(jù)單獨提取出來,將其轉換為DatetimeIndex類型或PeriodIndex類型。但DatetimeIndex和PeriodIndex在日常使用的過程中并無太大區(qū)別。DatetimeIndex是用于指代一系列時間點的一種數(shù)據(jù)結構。PeriodIndex則是用于指代一系列時間段的數(shù)據(jù)結構。轉換字符串時間為標準時間DatetimeIndex類與PeriodIndex類的基本使用格式如下。轉換字符串時間為標準時間classpandas.DatetimeIndex(data=None,freq=_NoDefault.no_default,tz=_NoDefault.no_default,normalize=_NoDefault.no_default,closed=_NoDefault.no_default,ambiguous='raise',dayfirst=False,yearfirst=False,dtype=None,copy=False,name=None)classpandas.PeriodIndex(data=None,ordinal=None,freq=None,dtype=None,copy=False,name=None,**fields)DatetimeIndex可以用于轉換數(shù)據(jù),還可以用于創(chuàng)建時間序列數(shù)據(jù),常用參數(shù)及其說明如下表。轉換字符串時間為標準時間函數(shù)名稱參數(shù)說明data接收類數(shù)組。表示用可選的類似日期時間的數(shù)據(jù)來構造索引。默認為Nonefreq接收str。表示一種pandas周期字符串或相應的對象。無默認值tz接收時區(qū)或str。表示設置數(shù)據(jù)的時區(qū)。默認為Nonedtype接收Numpy.dtype或DatetimeTZDtype或str。表示數(shù)據(jù)類型。默認為NonePeriodIndex可以用于轉換數(shù)據(jù),還可以用于創(chuàng)建時間序列數(shù)據(jù),常用參數(shù)及其說明如下表。當將數(shù)據(jù)格式轉換為PeriodIndex類型時,需要通過freq參數(shù)指定時間間隔,常用的時間間隔參數(shù)值有Y(年)、M(月)、D(日)、H(小時)、T(分鐘)、S(秒)。Period類用于表示時間上的一個區(qū)間或周期,如月份、季度、年份等的時間間隔,Period比Timestamp更適合用于表示一段時間的概念,而不僅僅是時間點。轉換字符串時間為標準時間函數(shù)名稱參數(shù)說明data接收類數(shù)組。表示用可選的類似周期的數(shù)據(jù)來構造索引。默認為Nonefreq接收str。表示一種pandas周期字符串或相應的對象。默認為Nonedtype接收str或PeriodDtype。表示數(shù)據(jù)類型。默認為None在多數(shù)涉及與時間相關的數(shù)據(jù)處理、統(tǒng)計分析的過程中,都需要提取時間中的年份、月份等數(shù)據(jù)。使用對應的Timestamp類屬性就能夠實現(xiàn)這一目的,其常用類屬性及說明如下表。提取時間序列數(shù)據(jù)信息屬性名稱屬性說明屬性名稱屬性說明year年week一年中第幾周month月quarter季節(jié)day日weekofyear一年中第幾周hour小時dayofyear一年中的第幾天minute分鐘dayofweek一周第幾天second秒weekday一周第幾天date日期is_leap_year是否閏年time時間

時間數(shù)據(jù)的算術運算在現(xiàn)實中隨處可見,例如,2020年1月1日減一天就是2019年12月31日。pandas的時間數(shù)據(jù)和現(xiàn)實生活中的時間數(shù)據(jù)一樣可以做運算。這時就涉及pandas的Timedelta類。Timedelta是時間相關類中的一個異類,不僅能夠使用正數(shù),還能夠使用負數(shù)表示單位時間,如weeks=1、days=-2等。使用Timedelta類,配合常規(guī)的時間相關類能夠輕松實現(xiàn)時間的算術運算。加減時間數(shù)據(jù)在Timedelta類的時間周期中沒有年和月,所有周期名稱、對應單位及其說明如下表(注:表中單位采用程序定義的符號,與法定單位符號可能不一致)。加減時間數(shù)據(jù)周期名稱單位說明weeks無星期daysD天hoursh小時minutesm分secondss秒millisecondsms毫秒microsecondsus微秒nanosecondsns納秒1DataFrame的常用操作目錄讀/寫不同數(shù)據(jù)源的數(shù)據(jù)2轉換與處理時間序列數(shù)據(jù)3使用分組聚合進行組內(nèi)計算4groupby()方法提供的是分組聚合步驟中的拆分功能,能夠根據(jù)索引或特征對數(shù)據(jù)進行分組,其基本使用格式如下。groupby()方法拆分數(shù)據(jù)DataFrame.groupby(by=None,axis=_NoDefault.no_default,level=None,as_index=True,sort=True,group_keys=True,observed=_NoDefault.no_default,dropna=True)groupby()方法的常用參數(shù)及其說明如下表。groupby()方法拆分數(shù)據(jù)函數(shù)名稱參數(shù)說明by接收list、str、mapping、function或generator。表示用于確定進行分組的依據(jù),若傳入的是一個函數(shù),則對索引進行計算并分組;若傳入的是一個字典或Series,則字典或Series的值用于作為分組依據(jù);若傳入一個NumPy數(shù)組,則數(shù)據(jù)的元素作為分組依據(jù);若傳入的是字符串或字符串列表,則使用這些字符串所代表的特征作為分組依據(jù)。默認為Noneaxis接收0或1。表示操作的軸向。默認為0level接收int或索引名。表示標簽所在級別。默認為Noneas_index接收bool。表示聚合后的聚合標簽是否以DataFrame索引形式輸出。默認為Truesort接收bool。表示是否對分組依據(jù)、分組標簽進行排序。默認為Truegroup_keys接收bool。表示是否顯示分組標簽的名稱。默認為True分組后的結果并不能直接查看,而是被存在內(nèi)存中,輸出的是內(nèi)存地址。實際上,分組后的數(shù)據(jù)對象groupby類似于Series與DataFrame,也是pandas提供的一種對象。groupby對象常用的描述性統(tǒng)計方法及說明如下表。groupby()方法拆分數(shù)據(jù)方法名稱方法說明方法名稱方法說明count返回各組的計數(shù)值,不包括缺失值cumcount對每個分組中的組員進行標記,0~n-1head返回每組的前n個值size返回每組的大小max返回每組最大值min返回每組最小值mean返回每組的均值std返回每組的標準差median返回每組的中位數(shù)sum返回每組的和agg()方法和aggregate()方法都支持對每個分組應用某函數(shù),包括Python內(nèi)置函數(shù)或自定義函數(shù)。同時,這兩個方法也能夠直接對DataFrame進行函數(shù)應用操作。針對DataFrame的agg()方法與aggregate()方法的基本使用格式如下。使用agg()方法聚合數(shù)據(jù)DataFrame.agg(func,axis=0,*args,**kwargs)DataFrame.aggregate(func,axis=0,*args,**kwargs)在正常使用過程中,agg()方法和aggregate()方法對DataFrame對象操作時的功能幾乎完全相同,因此只需要掌握其中一個方法即可。agg()方法的常用參數(shù)及其說明如下表。使用agg()方法聚合數(shù)據(jù)函數(shù)名稱參數(shù)說明func接收list、dict、function或str。表示用于聚合數(shù)據(jù)的函數(shù)。無默認值axis接收0或1。代表操作的軸向。默認為0使用agg()方法時,對于某個特征希望只做求均值操作,而對另一個特征則希望只做求和操作。此時需要使用字典的方式,將兩個特征名分別作為key,然后將NumPy庫的求和與求均值的函數(shù)分別作為value。如果希望求出某個特征的多個統(tǒng)計量,對某些特征則只需要求一個統(tǒng)計量,此時只需要將字典對應key的value轉換為列表,將列表元素轉換為多個目標的統(tǒng)計量即可。在agg()方法中還可以傳入讀者自定義的函數(shù)。使用agg()方法聚合數(shù)據(jù)在NumPy庫中的函數(shù)np.mean、np.median、d、np.sum、np.std和np.var能夠在agg()方法中直接使用。在自定義函數(shù)中使用NumPy庫中的這些函數(shù)。計算的時候是單個序列,會無法得出想要的結果。多列數(shù)據(jù)同時計算,才能得到正確的結果。使用agg()方法也能夠實現(xiàn)對每一個特征的每一組使用相同的函數(shù)。若需要對不同的特征應用不同的函數(shù),則與DataFrame中使用agg()方法的操作相同。使用agg()方法聚合數(shù)據(jù)apply()方法類似于agg()方法,能夠將函數(shù)應用于每一列。不同之處在于,與apply()方法相比,agg()方法傳入的函數(shù)只能夠作用于整個DataFrame或Series,而無法像agg()方法一樣能夠對不同特征應用不同函數(shù)來獲取不同結果。apply()方法的基本使用格式如下。使用apply()方法聚合數(shù)據(jù)DataFrame.apply(func,axis=0,raw=False,result_type=None,args=(),by_row='compat',engine='python',engine_kwargs=None,**kwargs)apply()方法的使用方式和agg()方法相同。使用apply()方法對GroupBy對象進行聚合操作的方法和agg()方法也相同,但使用agg()方法能夠實現(xiàn)對不同的特征應用不同的函數(shù),而apply()方法則不行。apply()方法的常用參數(shù)及其說明如下表。使用apply()方法聚合數(shù)據(jù)函數(shù)名稱參數(shù)說明func接收functions。表示應用于每行或每列的函數(shù)。無默認值axis接收0或1。表示操作的軸向。默認為0raw接收bool。表示是否直接將ndarray對象傳遞給函數(shù)。默認為Falsetransform()方法能夠對整個DataFrame的所有元素進行操作,其基本使用格式如下。transform()方法的常用參數(shù)及其說明如下表。使用transform()方法聚合數(shù)據(jù)DataFrame.transform(func,axis=0,*args,**kwargs)函數(shù)名稱參數(shù)說明func接收functions、str、類列表或類字典。表示用于轉換的函數(shù)。無默認值axis接收0或'index'、1或'columns'。代表操作的軸向。默認為0介紹CSV數(shù)據(jù)、Excel數(shù)據(jù)和數(shù)據(jù)庫數(shù)據(jù)這3種常用的數(shù)據(jù)讀取與寫入方式。闡述DataFrame的常用屬性、查改增刪方法與描述性統(tǒng)計的相關內(nèi)容。介紹時間數(shù)據(jù)的轉換、信息提取與算術運算。最后還介紹了分組聚合方法groupby()的用法以及其他3種聚合方法。小結使用pandas進行數(shù)據(jù)預處理1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標準化數(shù)據(jù)3轉換數(shù)據(jù)4橫向堆疊,即將兩個表在x軸向拼接在一起,可以使用concat函數(shù)完成。concat函數(shù)的基本使用格式如下。concat函數(shù)的常用參數(shù)及其說明如下表。堆疊合并數(shù)據(jù)1.橫向堆疊參數(shù)名稱參數(shù)說明objs接收多個Series、DataFrame、Panel的組合。表示參與連接的pandas對象的列表的組合。無默認值axis接收int。表示連接的軸向,可選0和1。默認為0pandas.concat(objs,axis=0,join='outer',ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False,sort=False,copy=True)concat函數(shù)的常用參數(shù)及其說明(續(xù)表)。堆疊合并數(shù)據(jù)參數(shù)名稱參數(shù)說明join接收str。表示其他軸向上的索引是按交集(inner)還是并集(outer)進行合并。默認為outerignore_index接收bool。表示是否不保留連接軸上的索引,產(chǎn)生一組新索引range(total_length)。默認為Falsekeys接收sequence。表示與連接對象有關的值,用于形成連接軸向上的層次化索引。默認為Nonelevels接收包含多個sequence的list。表示在指定keys參數(shù)后,指定用作層次化索引各級別上的索引。默認為Nonenames接收list。表示在設置了keys和levels參數(shù)后,用于創(chuàng)建分層級別的名稱。默認為Noneverify_integrity接收bool。表示檢查新連接的軸是否包含重復項,如果發(fā)現(xiàn)重復項,那么引發(fā)異常。默認為Falsesort接收bool。表示對非連接軸進行排序。默認為Falsecopy接受bool。表示是否有必要復制數(shù)據(jù)。默認為True當參數(shù)axis=1時,concat函數(shù)可做行對齊,然后將不同列名稱的兩張或多張表合并。當兩個表索引不完全一樣時,可以設置join參數(shù)選擇是內(nèi)連接還是外連接。在內(nèi)連接的情況下,僅僅返回索引重疊部分數(shù)據(jù);在外連接的情況下,則顯示索引的并集部分數(shù)據(jù),不足的地方則使用空值填補,橫向堆疊外連接示例如圖所示。當兩份數(shù)據(jù)行索引完全一樣時,不論join參數(shù)的取值是inner或outer,結果都是將兩個表完全按照x軸拼接起來。堆疊合并數(shù)據(jù)使用concat函數(shù)時,在默認情況下,即axis=0,concat函數(shù)做列對齊,將不同行索引的兩張或多張表縱向合并。在兩張表的列名并不完全相同的情況下,可以使用join參數(shù)。當join參數(shù)取值為inner時,返回的僅僅是列名的交集所代表的列。當join參數(shù)取值為outer時,返回的是兩者列名的并集所代表的列。其原理示意如圖。當兩張表的列名完全相同時,不論join參數(shù)的取值是inner還是outer,結果都是將兩個表完全按照y軸拼接起來。堆疊合并數(shù)據(jù)2.縱向堆疊主鍵合并,即通過一個或多個鍵將兩個數(shù)據(jù)集的行連接起來,類似于SQL中的join。針對兩張包含不同特征的表,將根據(jù)某幾個特征做為主鍵,將表一一對應拼接起來

,合并后數(shù)據(jù)的列數(shù)為兩個原數(shù)據(jù)表的列數(shù)之和減去主鍵列的數(shù)量

主鍵合并數(shù)據(jù)和數(shù)據(jù)庫的join一樣,merge函數(shù)也有左連接(left)、右連接(right)、內(nèi)連接(inner)和外連接(outer)。比起數(shù)據(jù)庫SQL語言中的join,merge函數(shù)還有其自身獨到之處,如可以在合并過程中對數(shù)據(jù)集中的數(shù)據(jù)進行排序等,merge函數(shù)的基本使用格式如下。根據(jù)merge函數(shù)中的參數(shù)說明,并按照需求修改相關參數(shù),即可以多種方法實現(xiàn)主鍵合并。主鍵合并數(shù)據(jù)pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=('_x','_y'),copy=True,indicator=False,validate=None)merge函數(shù)的常用參數(shù)及其說明。主鍵合并數(shù)據(jù)參數(shù)名稱參數(shù)說明left接收DataFrame或Series。表示要添加的新數(shù)據(jù)1。無默認值right接收DataFrame或Series。表示要添加的新數(shù)據(jù)2。無默認值how接收“inner”“outer”“l(fā)eft”或“right”。表示數(shù)據(jù)的連接方式。默認為inneron接收str或sequence。表示兩個數(shù)據(jù)合并的主鍵(必須一致)。默認為Noneleft_on接收str或sequence。表示left參數(shù)接收數(shù)據(jù)用于合并的主鍵。默認為Nonemerge函數(shù)的常用參數(shù)及其說明(續(xù)表)。主鍵合并數(shù)據(jù)參數(shù)名稱參數(shù)說明right_on接收str或sequence。表示right參數(shù)接收數(shù)據(jù)用于合并的主鍵。默認為Noneleft_index接收bool。表示是否將left參數(shù)接收數(shù)據(jù)的index作為連接主鍵。默認為Falseright_index接收bool。表示是否將right參數(shù)接收數(shù)據(jù)的index作為連接主鍵。默認為Falsesort接收bool。表示是否根據(jù)連接鍵對合并后的數(shù)據(jù)進行排序。默認為Falsesuffixes接收tuple。表示用于追加到left和right參數(shù)接收數(shù)據(jù)列名相同時的后綴。默認為('_x','_y')除了使用merge函數(shù)以外,使用join()方法也可以實現(xiàn)部分主鍵合并的功能。但是當使用join()方法時,兩個主鍵的名字必須相同,join()方法的基本使用格式如下。主鍵合并數(shù)據(jù)pandas.DataFrame.join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False,validate=None)join()函數(shù)的常用參數(shù)及其說明。主鍵合并數(shù)據(jù)參數(shù)名稱參數(shù)說明other接收DataFrame、Series或包含多個DataFrame的list。表示參與連接的其他DataFrame。無默認值on接收列名、包含列名的list或tuple。表示用于連接的列名。默認為Nonehow接收特定str。表示連接方式。當取值為“inner”時代表內(nèi)連接;當取值為“outer”時代表外連接;當取值為“l(fā)eft”時代表左連接;當取值為“right”時代表右連接。默認為leftlsuffix接收str。表示追加到左側重疊列名的后綴。無默認值rsuffix接收str。表示追加到右側重疊列名的后綴。無默認值sort接收bool。表示根據(jù)主鍵對合并后的數(shù)據(jù)進行排序。默認為False在數(shù)據(jù)分析和數(shù)據(jù)處理過程中偶爾會出現(xiàn)兩份數(shù)據(jù)的內(nèi)容幾乎一致的情況,但是某些特征在其中一張表上是完整的,而在另外一張表上的數(shù)據(jù)則是缺失的。combine_first()方法來進行重疊數(shù)據(jù)合并,其原理如下圖所示。重疊合并數(shù)據(jù)combine_first()方法的基本使用格式如下。combine_first()方法的常用參數(shù)及其說明表如下。重疊合并數(shù)據(jù)參數(shù)名稱參數(shù)說明other接收DataFrame。表示參與重疊合并的另一個DataFrame。無默認值pandas.DataFbine_first(other)1清洗數(shù)據(jù)目錄合并數(shù)據(jù)2標準化數(shù)據(jù)3轉換數(shù)據(jù)4記錄重復,即一個或多個特征的某幾條記錄的值完全相同。方法一:利用列表(list)去重,自定義去重函數(shù)。方法二:利用集合(set)元素唯一的特性去重。比較上述兩種方法可以發(fā)現(xiàn),方法一代碼冗長。方法二看似代碼簡潔了許多,但是會導致數(shù)據(jù)的排列發(fā)生改變。檢測與處理重復值1.記錄重復pandas提供了一個名為drop_duplicates的去重方法,使用該方法進行去重不會改變數(shù)據(jù)原始排列,并且兼具代碼簡潔和運行穩(wěn)定的特點。不僅支持單一特征的數(shù)據(jù)去重,還能夠依據(jù)DataFrame的其中一個或多個特征進行去重操作。drop_duplicates()方法的基本使用格式如下。檢測與處理重復值pandas.DataFrame.drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)drop_duplicates()方法的常用參數(shù)及其說明。檢測與處理重復值參數(shù)名稱參數(shù)說明subset接收str或sequence。表示進行去重的特征。默認為Nonekeep接收特定str。表示重復時保留第幾個數(shù)據(jù),“first”表示保留第一個;“l(fā)ast”表示保留最后一個;False表示只要有重復都不保留。默認為firstinplace接收bool。表示是否在原表上進行操作。默認為Falseignore_index接收bool。表示是否忽略索引。默認為False結合相關的數(shù)學和統(tǒng)計學知識,要去除連續(xù)的特征重復,可以利用特征間的相似度將兩個相似度為1的特征去除其中一個。在pandas中,相似度的計算方法為corr()。使用該方法計算相似度時,默認為pearson法,可以通過method參數(shù)進行調(diào)節(jié),目前還支持spearman法和kendall法。通過相似度矩陣去重存在一個弊端是只能對數(shù)值型重復特征去重,類別型特征之間無法通過計算相似系數(shù)來衡量相似度,因此無法根據(jù)相似度矩陣對其進行去重處理。除了使用相似度矩陣進行特征去重之外,還可以通過equals()方法進行特征去重。檢測與處理重復值2.特征重復equals()方法的基本使用格式如下。equals()方法的參數(shù)說明表如下。檢測與處理重復值參數(shù)名稱參數(shù)說明other接收Series或DataFrame。表示要與第一個Series或DataFrame進行比較的另一個Series或DataFrame。無默認值pandas.DataFrame.equals(other)在數(shù)據(jù)中的某個或某些特征的值是不完整的,這些值稱為缺失值。pandas提供了識別缺失值的isnull()方法以及識別非缺失值的notnull()方法,這兩種方法在使用時返回的都是布爾值,即True和False。結合sum函數(shù)、isnull()方法和notnull()方法,可以檢測數(shù)據(jù)中缺失值的分布以及數(shù)據(jù)中一共含有多少缺失值。isnull()方法和notnull()方法的結果正好相反,因此使用其中任意一個都可以識別出數(shù)據(jù)是否存在缺失值。檢測與處理缺失值刪除法是指將含有缺失值的特征或記錄刪除。刪除法分為刪除觀測記錄和刪除特征兩種,它屬于通過減少樣本量來換取信息完整度的一種方法,是一種較為簡單的缺失值處理方法。pandas中提供了簡便的刪除缺失值的dropna()方法,通過控制參數(shù),既可以刪除觀測記錄,又可以刪除特征。dropna()方法的基本使用格式如下。檢測與處理缺失值1.刪除法pandas.DataFrame.dropna(*,axis=0,how=any,thresh=None,subset=None,inplace=False,ignore_index=False)dropna()方法的常用參數(shù)及其說明。檢測與處理缺失值參數(shù)名稱參數(shù)說明axis接收0或1。表示軸向,0為刪除觀測記錄(行),1為刪除特征(列)。默認為0how接收特定str。表示刪除的形式,當取值為any時,表示只要有缺失值存在就執(zhí)行刪除操作;當取值為all時,表示當且僅當全部為缺失值時才執(zhí)行刪除操作。默認為anythresh接收int。表示保留至少含有n(thresh參數(shù)值)個非空數(shù)值的行。默認為Nonesubset接收array。表示進行去重的列/行。默認為Noneinplace接收bool。表示是否在原表上進行操作。默認為False替換法是指用一個特定的值替換缺失值。特征可分為數(shù)值型和類別型,兩者出現(xiàn)缺失值時的處理方法也是不同的。當缺失值所在特征為數(shù)值型時,通常利用其均值、中位數(shù)或眾數(shù)等描述其集中趨勢的統(tǒng)計量來代替缺失值。當缺失值所在特征為類別型時,則選擇使用眾數(shù)來替換缺失值。檢測與處理缺失值2.替換法pandas庫中提供了缺失值替換的fillna()方法,fillna()方法的基本使用格式如下。fillna()方法的常用參數(shù)及其說明如下。檢測與處理缺失值pandas.DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None)參數(shù)名稱參數(shù)說明value接收scalar、dict、Series或DataFrame。表示用于替換缺失值的值。默認為Nonemethod接收特定str。表示填補缺失值的方式。當取值為“backfilll”或“bfill”時表示使用下一個非缺失值來填補缺失值;當取值為“pad”或“ffill”時表示使用上一個非缺失值來填補缺失值。默認為Nonefillna()方法的常用參數(shù)及其說明(續(xù)表)。檢測與處理缺失值參數(shù)名稱參數(shù)說明axis接收0或1。表示軸向。默認為Noneinplace接收bool。表示是否在原表上進行操作。默認為Falselimit接收int。表示填補缺失值個數(shù)上限,超過則不進行填補。默認為Nonedowncast接收dict。表示轉換數(shù)據(jù)類型。默認為None刪除法簡單易行,但是會引起數(shù)據(jù)結構變動,樣本減少;替換法使用難度較低,但是會影響數(shù)據(jù)的標準差,導致信息量變動。線性插值是一種較為簡單的插值方法,它針對已知的值求出線性方程,通過求解線性方程得到缺失值。檢測與處理缺失值3.插值法多項式插值是利用已知的值擬合一個多項式,使得現(xiàn)有的數(shù)據(jù)滿足這個多項式,再利用這個多項式求解缺失值,常見的多項式插值又分有拉格朗日插值和牛頓插值等。樣條插值是以可變樣條來做出一條經(jīng)過一系列點的光滑曲線的插值方法。插值樣條由一些多項式組成,每一個多項式都由相鄰兩個數(shù)據(jù)點決定,這樣可以保證兩個相鄰多項式及其導數(shù)在連接處連續(xù)。檢測與處理缺失值從擬合結果可以看出,在多項式插值和樣條插值兩種情況下的擬合都非常出色,線性插值法只在自變量和因變量為線性關系的情況下擬合才較為出色。在實際分析過程中,由于自變量與因變量的關系是線性的情況非常少見,所以在大多數(shù)情況下,多項式插值和樣條插值是較為合適的選擇。SciPy庫中的interpolate模塊除了提供常規(guī)的插值法外,還提供了如在圖形學領域具有重要作用的重心坐標插值(BarycentricInterpolator)等。在實際應用中,需要根據(jù)不同的場景選擇合適的插值方法。檢測與處理缺失值3σ原則又稱為拉依達準則,其原則就是先假設一組檢測數(shù)據(jù)只含有隨機誤差,對原始數(shù)據(jù)進行計算處理得到標準差,然后按一定的概率確定一個區(qū)間,認為數(shù)據(jù)超過這個區(qū)間就屬于異常。3σ原則僅適用于對正態(tài)或近似正態(tài)分布的樣本數(shù)據(jù)進行處理。正態(tài)分布數(shù)據(jù)的3σ原則如下表所示,其中σ代表標準差,μ代表均值。數(shù)據(jù)的數(shù)值分布幾乎全部集中在區(qū)間(μ

3σ,μ+3σ)內(nèi),超出這個范圍的數(shù)據(jù)僅占不到0.3%。故根據(jù)小概率原理,可以認為超出3σ的部分為異常數(shù)據(jù)。檢測與處理異常值1.3σ原則數(shù)值分布在數(shù)據(jù)中的占比(μ

σ,

σ)0.6827(μ

2σ,

2σ)0.9545(μ

3σ,

3σ)0.9973箱線圖提供了識別異常值的一個標準,即異常值通常被定義為小于QL-1.5IQR或大于QU+1.5IQR的值。QL稱為下四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它小;QU稱為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)

溫馨提示

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

最新文檔

評論

0/150

提交評論