《Python程序設(shè)計基礎(chǔ)》 課件第10章實戰(zhàn)項目之 Pandas 和Matplotlib_第1頁
《Python程序設(shè)計基礎(chǔ)》 課件第10章實戰(zhàn)項目之 Pandas 和Matplotlib_第2頁
《Python程序設(shè)計基礎(chǔ)》 課件第10章實戰(zhàn)項目之 Pandas 和Matplotlib_第3頁
《Python程序設(shè)計基礎(chǔ)》 課件第10章實戰(zhàn)項目之 Pandas 和Matplotlib_第4頁
《Python程序設(shè)計基礎(chǔ)》 課件第10章實戰(zhàn)項目之 Pandas 和Matplotlib_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章

實戰(zhàn)項目之Pandas和

MatplotlibPandas入門Pandas運算Pandas讀寫數(shù)據(jù)Pandas和Matplotlib繪圖目錄Pandas運算10.210.1Pandas入門10.3Pandas讀寫數(shù)據(jù)Pandas和Matplotlib繪圖10.4知識架構(gòu)10.1Pandas入門1Pandas安裝2Series和DataFrame對象3索引對象4學生實踐練習10.1Pandas入門1Pandas安裝1.使用PyCharm工具進行安裝

依次單擊菜單中的“File”→“Settings…”打開PyCharm的設(shè)置界面,單擊設(shè)置界面的“Project工程名”(此處為“Projectchapter10”)下的“ProjectInterpreter”菜單,單擊“+”按鈕添加Pandas庫,如圖10.1Pandas入門1Pandas安裝

打開命令行工具,執(zhí)行“pipinstallpandas”命令安裝Pandas庫,如圖2.使用pip命令安裝10.1Pandas入門2Series和DataFrame對象1.Series對象

Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)及一組與之相關(guān)的數(shù)據(jù)標簽(索引)組成。可以由一組數(shù)據(jù)產(chǎn)生最簡單的Series,也可以帶有一個對各個數(shù)據(jù)點進行標記的索引。Series對象創(chuàng)建的語法如下:frompandasimportSeries#導入Pandas模塊中的Series類Series對象名=Series(列表)#最簡單的SeriesSeries對象名=Series(列表,index=索引的列表)#帶有標記的索引

如果沒有為數(shù)據(jù)指定索引,會自動創(chuàng)建一個0到N?1(N為數(shù)據(jù)的長度)的整數(shù)型索引,這時可以通過Series的values和index屬性獲取其數(shù)組的表示形式和索引對象。10.1Pandas入門2Series和DataFrame對象示例10.1

分別使用兩種方式創(chuàng)建Series對象,并輸出該對象及它的數(shù)組的表示形式和索引對象。frompandasimportSeriesobj1=Series([5,8,7])#最簡單的Series對象obj2=Series([5,8,7],index=["a","b","c"])#帶有對各個數(shù)據(jù)標記的索引print(obj1)print(obj2)print("Series的值為:",obj1.values)print("Series的索引對象為:",obj1.index)10.1Pandas入門2Series和DataFrame對象示例10.1的結(jié)果,如圖10.3所示。10.1Pandas入門2Series和DataFrame對象示例10.2根據(jù)Series對象的特性實現(xiàn)Series對象的各項操作。frompandasimportSeriesobj=Series([8,6,-5,2],index=["a","b","c","d"])定義Series對象如下:

(1)Series對象可以通過索引的方式選取Series中的單個或一組值,代碼如下:print("1.選取Series中的單個或一組值")print(obj["a"])#輸出8print(obj["d"])#輸出2print(obj[["a","c","d"]])#選取索引為"a","c","d"對應的值10.1Pandas入門2Series和DataFrame對象print("2.進行NumPy數(shù)組運算")print(obj[obj>0])#獲取值大于0的數(shù)據(jù)print(obj*2)#輸出Series對象中每個數(shù)據(jù)乘2之后的結(jié)果(3)將Series看成是一個定長的有序字典,因為它是一個索引值到數(shù)據(jù)值的一個映射,代碼如下:print("3.將Series看成是一個定長的有序字典")print("a"inobj)#判斷obj對象中是否存在索引值為"a"的數(shù)據(jù)dict={"a":23,"b":12,"c":8}#定義字典對象obj2=Series(dict)#將dict對象轉(zhuǎn)化為Series對象(2)對Series對象進行NumPy數(shù)組運算,如根據(jù)布爾型數(shù)組進行過濾、標量乘法或應用數(shù)學函數(shù)等都會保留索引和值之間的連接,代碼如下:10.1Pandas入門2Series和DataFrame對象print("4.isnull()方法檢測缺失數(shù)據(jù)")obj.isnull()#檢測缺失數(shù)據(jù)(5)在算術(shù)運算中會自動對齊不同索引的數(shù)據(jù),代碼如下:print("5.自動對齊不同索引的數(shù)據(jù)")obj2=Series([8,6,-5],index=["a","b","e"])#再定義一個Series對象print(obj+obj2)#輸出兩個Series對象的和(4)如果Series的值中出現(xiàn)NaN(NotaNumber:非數(shù)字),在Pandas模塊中提供了isnull()函數(shù)和notnull()函數(shù)用于檢測缺失數(shù)據(jù),Series對象也提供了isnull()方法檢測缺失數(shù)據(jù),代碼如下:10.1Pandas入門2Series和DataFrame對象print("6.Series對象本身及其索引都有一個name屬性")="population"#給obj對象本身的name屬性賦值="state"#給obj對象的索引的name屬性賦值print(obj)(7)Series的索引可以通過賦值的方式修改。如果對象中有4個數(shù)據(jù),索引賦值時也必須保證索引中有4個元素,代碼如下:print("7.Series的索引可以通過賦值的方式修改")obj.index=["f","g","k","m"]print(obj)(6)Series對象本身及其索引都有一個name屬性,該屬性跟Pandas其他的關(guān)鍵功能關(guān)系非常密切,代碼如下:10.1Pandas入門2Series和DataFrame對象代碼及運行結(jié)果如圖10.1Pandas入門2Series和DataFrame對象2.DataFrame對象

DataFrame是一種類似電子表格的數(shù)據(jù)結(jié)構(gòu),一個DataFrame表示一個表格。它包含一個經(jīng)過排序的列表集,列表集中的每個數(shù)據(jù)都可以有不同的類型值(數(shù)字、字符串、布爾等)。DataFrame有行和列的索引;它可以被看作是一個Series的字典(每個Series共享一個索引)1)創(chuàng)建DataFrame對象

有很多方法來構(gòu)建一個DataFrame,但最常用的是用一個相等長度列表的字典或NumPy數(shù)組來構(gòu)建,產(chǎn)生的DataFrame和Series一樣,它的索引會自動分配,并且對列進行了排序。10.1Pandas入門2Series和DataFrame對象示例10.3在IDLE工具中創(chuàng)建DataFrame對象。#導入Pandas模塊中的Series和DataFrame對象frompandasimportSeries,DataFramedata={"name":["yahoo","google","facebook"],"marks":[200,400,800],

"price":[9,3,7]}frame=DataFrame(data)#將相等長度列表的字典對象轉(zhuǎn)化為DataFrame對象print(frame)#自定義DataFrame索引frame2=DataFrame(data,columns=['name','price','marks','debt'],

index=['a','b','c'])print(frame2)10.1Pandas入門2Series和DataFrame對象在IDLE工具中執(zhí)行創(chuàng)建DataFrame對象代碼,運行結(jié)果如圖10.1Pandas入門2Series和DataFrame對象

在DataFrame對象中使用columns屬性獲取所有的列,能顯示所有列的名稱。在示例10.3中添加如下代碼:2)DataFrame對象中列的操作print(frame2.columns)使用columns屬性獲取所有列的運行結(jié)果如圖10.1Pandas入門2Series和DataFrame對象另外,DataFrame對象能用類似字典的方式,得到某豎列的全部內(nèi)容,且每列實際上是一個Series對象,因此可以將DataFrame理解成是由一個一個的Series組成的。結(jié)合Series對象的特性,可以統(tǒng)一給frame2對象的debt列賦值,在示例10.3中添加如下代碼frame2['debt']=89.2print(frame2)frame2對象的列賦值的運行結(jié)果如圖10.1Pandas入門2Series和DataFrame對象DataFrame對象的每豎列都是一個Series對象,因此可以定義一個Series對象,將Series對象賦值給DataFrame對象中的某一列,在示例10.3中添加如下代碼:debt=Series([2.2,3.3],index=["a","c"])frame2["debt"]=debtprint(frame2)Series對象賦值給DataFrame對象中的某一列的運行結(jié)果如圖10.1Pandas入門2Series和DataFrame對象DataFrame對象的values屬性與Series對象類似,會以二維ndarray的形式返回DataFrame中的數(shù)據(jù),如果DataFrame各列的數(shù)據(jù)類型不同,則值數(shù)組的數(shù)據(jù)類型就會選用能兼容所有列的數(shù)據(jù)類型。例如,現(xiàn)有data1和data2兩個數(shù)組,均轉(zhuǎn)化為DataFrame對象,其values的數(shù)據(jù)類型會有所不同,在示例10.3的基礎(chǔ)上修改代碼如下:3)values屬性data1={"num1":[200,400,800],"num2":[60,300,50]}data2={"name":["yahoo","google","facebook"],"marks":[200,400,800],"price":[9,3,7]}frame1=DataFrame(data1)frame2=DataFrame(data2)print(frame1.values)print(frame2.values)10.1Pandas入門2Series和DataFrame對象values屬性的運行結(jié)果如圖10.1Pandas入門3索引對象示例10.4在IDLE工具中創(chuàng)建DataFrame對象。frompandasimportSeriesobj=Series(range(3),index=['a','b','c'])index=obj.index#獲取Series的索引對象print(index)#獲取第二位及之后的元素print(index[1:])

Pandas的索引對象負責管理軸標簽和其他元數(shù)據(jù),如軸名稱等。構(gòu)建Series或DataFrame時,所用到的任何數(shù)組或其他序列的標簽都會被轉(zhuǎn)換成一個Index索引對象。查看索引對象應使用index屬性。10.1Pandas入門3索引對象查看索引對象,如圖10.1Pandas入門3索引對象索引對象是不可修改的,對索引對象進行修改將會出現(xiàn)如圖10.11所示的異常信息。這樣能使Index對象在多個數(shù)據(jù)結(jié)構(gòu)之間安全共享。例如,在示例10.4中修改索引對象,添加如下代碼:index[1]='d'修改索引對象的報錯如圖10.1Pandas入門3索引對象表10.1中列出了Pandas庫中內(nèi)置的Index類,Index甚至可以被繼承從而實現(xiàn)特別的軸索引功能。10.1Pandas入門3索引對象1.Series和DataFrame的索引1)Series對象的索引Series對象的索引值不僅可以是整數(shù),還可以是字符串,代碼如下:frompandasimportSeriesimportnumpyasnpobj=Series(np.arange(4),index=['a','b','c','d'])#索引為整數(shù)print(obj[1])print(obj[2:4])#索引為字符串print(obj['b'])print(obj[['a','d']])10.1Pandas入門3索引對象Series對象使用整數(shù)或字符串作為索引值,如圖10.1Pandas入門3索引對象另外,可以設(shè)置特定索引對應的值,例如,設(shè)置索引為'b'到'c'的值為5,添加代碼如下:obj['b':'c']=5print(obj)設(shè)置索引為'b'到'c'的值為5,如圖10.1Pandas入門3索引對象2)DataFrame對象的索引對DataFrame對象進行索引,可以獲取一個或多個列,代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)print(frame['Ohio'])#獲取一列print(frame[['Texas','California']])#獲取多列10.1Pandas入門3索引對象對DataFrame進行索引,如圖10.1Pandas入門3索引對象DataFrame對象的索引使用方式,需要注意以下3種情況:(1)通過切片或布爾型數(shù)組選取行,在上述代碼中添加如下代碼:#切片選取print(frame[:2])#布爾型數(shù)組:選取索引為‘California’中值大于3的記錄print(frame[frame['California']>3])通過切片或布爾型數(shù)組選取行,如圖10.1Pandas入門3索引對象(2)通過布爾型DataFrame進行索引,在上述代碼中添加如下代碼:#布爾型DataFrame索引print(frame<5)#判斷元素是否小于5frame[frame<5]=0#設(shè)置frame中值小于5的元素均為0print(frame)通過布爾型DataFrame進行索引,如圖10.1Pandas入門3索引對象(3)在DataFrame的行上進行標簽索引,引入了專門的索引字段loc和iloc,其中l(wèi)oc通過行標簽索引數(shù)據(jù),而iloc通過行號索引行數(shù)據(jù)。例如,從DataFrame中選取行和列的子集,在上述代碼中添加如下代碼:print("原DataFrame對象數(shù)據(jù)為:\n",frame)#標簽索引#loc通過行標簽索引數(shù)據(jù),iloc通過行號索引行數(shù)據(jù)print(frame.loc[['a','d'],['Texas']])print(frame.iloc[[0,1],[0,1]])從DataFrame中選取行和列的子集,如圖10.1Pandas入門3索引對象2.重新索引Pandas對象的一個重要的方法是reindex,其作用是創(chuàng)建一個適應新索引的新對象。1)Series對象重新索引調(diào)用Series的reindex將會根據(jù)新索引進行重排。如果某個索引值當前不存在,就引入缺失值。frompandasimportSeriesobj=Series([4.5,7.2,-6.5,4],index=['d','b','a','c'])#重新索引obj2=obj.reindex(['a','b','c','d','e'])print(obj2)print(obj.reindex(['a','b','c','d','e'],fill_value=0))#fill_value引入缺失值,設(shè)置為0示例10.510.1Pandas入門3索引對象對Series對象重新索引的運行結(jié)果如圖10.1Pandas入門3索引對象對于時間序列這樣的有序數(shù)據(jù),重新索引時可以使用method參數(shù)實現(xiàn)插值處理,例如,使用ffill或pad可以實現(xiàn)前向填充值,使用bfill或backfill可以實現(xiàn)后向填充值。設(shè)置method參數(shù)的值為ffill的結(jié)果,在示例10.5中添加代碼如下:#重新索引并設(shè)置method參數(shù)為ffill,實現(xiàn)前向填充值obj3=Series(['blue','purple','yellow'],index=[0,2,4])print(obj3.reindex(range(6),method='ffill'))設(shè)置method參數(shù)的值為ffill的運行結(jié)果如圖10.1Pandas入門3索引對象2)DataFrame對象重新索引調(diào)用DataFrame對象中的reindex方法可以修改索引(行)、列或兩個都修改,如果僅傳入一個序列,則會重新索引行。調(diào)用DataFrame對象中reindex方法的結(jié)果,編寫如下代碼:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)#DataFrame對象重新索引frame2=frame.reindex(['a','b','c','d'])print(frame2)10.1Pandas入門3索引對象調(diào)用DataFrame對象中reindex方法的運行結(jié)果如圖10.1Pandas入門3索引對象另外,使用columns關(guān)鍵字可以重新索引列,添加代碼如下:#使用columns關(guān)鍵字重新索引列states=['texas','utal','California']print(frame.reindex(columns=states))使用columns關(guān)鍵字重新索引列的運行結(jié)果如圖所示。也可以同時對行和列進行重新索引,而插值則只能按行應用。10.1Pandas入門3索引對象3.刪除指定索引的值刪除某條軸上的一個或多個項很簡單,只要指定索引即可,drop方法返回的是一個在指定軸上刪除指定值后的新對象。例如,在示例10.5中刪除索引為a和c的行記錄,代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=['Ohio','Texas','California'])print(frame)#刪除索引為a和c的行記錄new_obj=frame.drop(['a','c'])print(new_obj)10.1Pandas入門3索引對象刪除多個項的運行結(jié)果如圖10.1Pandas入門4學生實踐練習

定義兩個字典對象,分別為wordDicts1={"人民":3,"群眾":2,"公平":4,"正義":6},wordDicts2={"司法":2,"社會":2}。分別將這兩個字典對象轉(zhuǎn)化為Series對象。輸出Series對象的索引,將兩個索引合并成一個新的索引對象,將第一個Series對象的索引對象替換為新的索引對象并輸出該Series對象的前面三個元素。2.實現(xiàn)思路(1)通過“Series(字典對象)”語句將字典對象轉(zhuǎn)化為Series對象。(2)使用“Series對象.index”語句獲取Series對象的索引對象。(3)使用索引對象中的union方法將兩個索引對象進行合并。(4)使用Series對象中的reindex方法對該對象進行重新索引。(5)使用“Series對象[上標:下標]”語句截取Series對象中的元素。1.需求說明知識架構(gòu)10.2Pandas運算1算術(shù)運算3匯總統(tǒng)計5處理缺失數(shù)據(jù)2排序4其他運算方法6學生實踐練習10.2Pandas運算1算術(shù)運算1.相同類型對象的算術(shù)運算Pandas可以對不同索引的相同對象進行算術(shù)運算,例如,在將對象相加時,如果存在不同的索引對,則結(jié)果的索引就是該索引對的并集,例如,將簡單的兩個Series對象進行相加,代碼如下:frompandasimportSeriess1=Series([7.2,-6.5,3.5,1.6],index=['a','c','d','e'])s2=Series([-2,3,4,5,8],index=['a','c','e','f','g'])print(s1+s2)不同索引對象相加的運行結(jié)果如圖10.2Pandas運算1算術(shù)運算在不重疊的索引處引入NaN值,從而實現(xiàn)自動的數(shù)據(jù)對齊,缺失值會在算術(shù)運算過程中傳播。對于DataFrame,對齊操作會同時發(fā)生在行和列上。例如,兩個DataFrame對象相加操作,代碼如下:frompandasimportDataFrameimportnumpyasnpdf1=DataFrame(np.arange(9).reshape(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])df2=DataFrame(np.arange(12).reshape(4,3),columns=list('bde'),index=['Oregon','Ohio','Texas','Colorado'])print(df1)print(df2)#兩個DataFrame對象相加操作print(df1+df2)10.2Pandas運算1算術(shù)運算DataFrame對象相加的運行結(jié)果如圖10.2Pandas運算1算術(shù)運算從上面的例子可以看出,沒有重疊的位置就會產(chǎn)生NaN值。使用DataFrame提供的add方法,傳入另一個DataFrame對象及一個fill_value參數(shù),添加代碼如下:#設(shè)置產(chǎn)生NaN值的位置為0print(df1.add(df2,fill_value=0))使用DataFrame對象的add方法的運行結(jié)果如圖10.2Pandas運算1算術(shù)運算DataFrame和Series之間的算術(shù)運算會將Series的索引匹配到DataFrame的列,然后沿著行一直向下傳播。DataFrame和Series之間的算術(shù)運算操作的代碼如下:frompandasimportSeries,DataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])series=frame.iloc[0]print("DataFrame對象為:\n",frame)print("series對象為:\n",series)print("兩者相減結(jié)果為:\n",frame-series)2.不同類型對象的算術(shù)運算10.2Pandas運算1算術(shù)運算DataFrame和Series之間的算術(shù)運算的運行結(jié)果如圖10.2Pandas運算1算術(shù)運算如果某個索引值在DataFrame的列或Series的索引中找不到,則參與運算的兩個對象就會被重新索引以形成并集,例如,在上述代碼中添加語句:series2=Series(range(3),index=['b','e','f'])print("兩者相加結(jié)果為:\n",frame+series2)索引值不存在時的運行結(jié)果如圖10.2Pandas運算1算術(shù)運算如果需要匹配行在列上傳播,則必須使用算術(shù)運算方法,例如,在上述代碼中添加語句:series3=frame['d']print("series對象為:\n",series3)print("DataFrame對象為:\n",frame)#算術(shù)運算print("算術(shù)運算后:\n",frame.sub(series3,axis=0))10.2Pandas運算1算術(shù)運算使用算術(shù)運算方法的運行結(jié)果如圖10.2Pandas運算2

排序根據(jù)條件對數(shù)據(jù)集進行排序也是一種重要的內(nèi)置運算,要對行或列索引進行排序,使用sort_index方法將返回一個已排序的新對象序列對象.sort_index(axis=0,level=None,ascending=True,

inplace=False,kind='quicksort',na_position

='last',sort_remaining=True,by=None)10.2Pandas運算2

排序在上述語法中,參數(shù)說明如下。(1)axis:0按照行名排序;1按照列名排序。(2)level:默認None,否則按照給定的level順序排列。(3)ascending:默認True升序排列;False降序排列。(4)inplace:默認False,否則排序之后的數(shù)據(jù)直接替換原來的數(shù)據(jù)框。(5)kind:排序方法,其值為{'quicksort','mergesort','heapsort'},默認為'quicksort'。(6)na_position:其值為{'first',last'}缺失值,默認排在最后即'last'。10.2Pandas運算2

排序(7)sort_remaining:其值為True或False,默認為Ture。如果其值為True,且是多層索引,則在指定級別排序后,也在其他級別(按順序)排序。(8)by:按照某一列或幾列數(shù)據(jù)進行排序,但是by參數(shù)不建議使用。例如,對Series對象的排序代碼如下:frompandasimportSeriesimportnumpyasnpobj=Series(np.arange(4),index=['d','a','b','c'])#使用sort_index方法將返回一個已排序的新對象print(obj.sort_index())10.2Pandas運算2

排序Series對象的排序的運行結(jié)果如圖10.2Pandas運算2

排序DataFrame也可以根據(jù)任意一個軸上的索引進行排序。數(shù)據(jù)默認是升序排序的,但也可以降序排序。sort_index()方法的使用代碼如下:frompandasimportDataFrameimportnumpyasnpframe=DataFrame(np.arange(9).reshape(3,3),index=['c','a','d'],columns=[4,6,5])print("DataFrame對象為:\n",frame)print("默認排序(按照行名排序):\n",frame.sort_index())print("按照列名排序:\n",frame.sort_index(axis=1))print("按照列名降序排列:\n",frame.sort_index(axis=1,ascending=False))10.2Pandas運算2

排序sort_index()方法的使用的運行結(jié)果如圖10.2Pandas運算2

排序在排序時,任何缺失值默認都會被放到Series的末尾。在DataFrame上,可以根據(jù)一個或多個列中的值進行排序,將一個或多個列的名字傳遞給by選項即可達到該目的,代碼如下:frompandasimportDataFrameframe=DataFrame({'b':[4,-3,7,2],'a':[1,6,5,3]})print("DataFrame對象為:\n",frame)print("對“b”列進行升序排列:\n",frame.sort_values(by='b'))print("對'a'和'b'兩列同時進行升序排列:\n",frame.sort_values(by=['a','b']))10.2Pandas運算2

排序根據(jù)一個或多個列中的值進行排序的運行結(jié)果如圖10.2Pandas運算2

排序排名跟排序關(guān)系密切,它會增設(shè)一個排名值(從1開始,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量),接下來介紹Series和DataFrame的rank方法。默認情況下,rank是通過“為各組分配一個平均排名”的方式來破壞平級關(guān)系的。rank方法的使用代碼如下:frompandasimportSeriesobj=Series([7,-2,4,3,12])print("序列為:\n",obj.rank())print("根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名:\n",obj.rank(method="first"))10.2Pandas運算2

排序rank方法的使用效果如圖10.2Pandas運算3匯總統(tǒng)計Pandas對象擁有一組常用的數(shù)學統(tǒng)計方法,例如,使用sum方法按列或按行求和的操作,代碼如下:frompandasimportSeries,DataFrameimportnumpyasnpframe=DataFrame({"b":[4,-3,7,np.nan],"a":[1,6,5,3]})print("按列進行求和運算:\n",frame.sum())print("按行進行求和運算:\n",frame.sum(axis=1))10.2Pandas運算3匯總統(tǒng)計使用sum方法按列或按行求和的運行結(jié)果如圖10.2Pandas運算4其他運算方法1.唯一值還有一類方法可以從一維Series的值中抽取信息。第一個函數(shù)是unique,它可以得到Series對象中的唯一值數(shù)組。unique函數(shù)的使用代碼如下:frompandasimportSeries,DataFrameobj=Series(['a','c','a','c','b','a','d','d'])#獲取Series中的唯一值數(shù)組uniques=obj.unique()print(uniques)10.2Pandas運算4其他運算方法unique函數(shù)的使用效果如圖10.35所示。其中返回的唯一值是未排序的,如果有需要,我們還可以對結(jié)果使用sort方法再次進行排序。10.2Pandas運算4其他運算方法2.值計數(shù)value_counts方法用于計算一個Series中各值出現(xiàn)的頻率,同時提供了isin方法用于計算一個表示“Series各值是否包含于傳入的值序列中”的布爾型數(shù)組。例如,value_counts方法和isin方法的使用,代碼如下:frompandasimportSeries,DataFrameobj=Series(['a','c','a','c','b','a','d','d'])#獲取Series中的唯一值數(shù)組uniques=obj.unique()print("原序列為:\n",uniques)uniques.sort()print("排序后:\n",uniques)print("統(tǒng)計頻率:\n",obj.value_counts())mask=obj.isin(['b','c'])print("檢測值是否存在:\n",mask)print("輸出與檢測值對應存在的序列元素:\n",obj[mask])10.2Pandas運算4其他運算方法value_counts方法和isin方法的使用效果如圖10.2Pandas運算5處理缺失數(shù)據(jù)缺失數(shù)據(jù)在大部分數(shù)據(jù)分析應用中都很常見,Pandas的設(shè)計目標之一就是讓缺失數(shù)據(jù)的處理任務盡量輕松。Pandas使用浮點值NaN(NotaNumber)表示浮點和非浮點數(shù)組中的缺失數(shù)據(jù)。它只是一個便于被檢測處理的標記而已。使用isnull函數(shù)判斷是否為空對象,代碼如下:frompandasimportSeriesimportnumpyasnpdata=Series(['a',np.nan,'c','d'])print("原序列為:\n",data)#判斷是否為空對象print("判斷是否為空:\n",data.isnull())10.2Pandas運算5處理缺失數(shù)據(jù)使用isnull函數(shù)判斷是否為空對象的運行結(jié)果如圖10.37所示。10.2Pandas運算5處理缺失數(shù)據(jù)缺失數(shù)據(jù)的處理方法見表10.3。10.2Pandas運算5處理缺失數(shù)據(jù)使用dropna()方法過濾Series和DataFrame中的缺失數(shù)據(jù),代碼如下:frompandasimportSeries,DataFramefromnumpyimportnanasNAdata=Series([1,NA,3,NA,7])print("過濾缺失數(shù)據(jù):\n",data.dropna())print("通過布爾類型索引過濾數(shù)據(jù):\n",data[data.notnull()])data=DataFrame([[1,6,5],[2,NA,NA]])cdata=data.dropna()print("過濾DataFrame對象的缺失數(shù)據(jù):\n",cdata)10.2Pandas運算5處理缺失數(shù)據(jù)使用dropna()方法過濾Series和DataFrame中的缺失數(shù)據(jù),運行結(jié)果如圖10.38所示。10.2Pandas運算6學生實踐練習1.需求說明定義兩個字典對象,分別為wordDicts1={"人民":3,"群眾":2,"公平":4,"正義":6},wordDicts2={"司法":2,"社會":2,"公平":2},實現(xiàn)如下需求:(1)先將兩個字典對象轉(zhuǎn)化為Series對象,再合并轉(zhuǎn)化后的Series對象。對合并后的Series對象進行排序和排名。(2)統(tǒng)計wordDicts1中關(guān)鍵字出現(xiàn)的總次數(shù)、關(guān)鍵字的個數(shù)及平均的次數(shù)。(3)將索引為“群眾”的值設(shè)置為NaN,濾除Series對象中缺失的數(shù)據(jù),即“群眾”對應的記錄。10.2Pandas運算6學生實踐練習2.實現(xiàn)思路(1)使用“Series(字典對象)”語句將字典對象轉(zhuǎn)化為Series對象。(2)使用“Series對象1.index.union(Series對象2.index)”語句合并兩個Series對象的索引對象。(3)使用“Series對象.reindex(新的索引對象)”重新對Series對象進行索引。(4)使用“Series對象.fillna(0)”將值為NaN的數(shù)據(jù)填充為0。(5)使用“Series對象1+Series對象2”語句計算兩個Series對象的和。(6)使用“Series對象.sort_values(ascending=False)”對值進行排序。(7)使用Series對象中的sum方法統(tǒng)計出關(guān)鍵字出現(xiàn)的總次數(shù)。(8)使用count方法統(tǒng)計關(guān)鍵字的個數(shù)。(9)使用mean方法統(tǒng)計平均的次數(shù)。(10)使用dropna方法濾除缺失的數(shù)據(jù)。知識架構(gòu)10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫3MySQL數(shù)據(jù)庫的讀寫4學生實踐練習2Excel文件的讀寫10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在Pandas模塊中,使用read_csv方法讀取CSV文件,該方法返回一個DataFrame對象?!菊Z法】pandas.read_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,index_col=None,usecols=None,squeeze=False,prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,skip_blank_lines=True,parse_dates=False,infer_datetime_format=False,keep_date_col=False,date_parser=None,dayfirst=False,iterator=False,chunksize=None,compression='infer',thousands=None,decimal=b'.',lineterminator=None,quotechar='"',quoting=0,escapechar=None,comment=None,encoding=None,dialect=None,tupleize_cols=None,error_bad_lines=True,warn_bad_lines=True,skipfooter=0,skip_footer=0,doublequote=True,delim_whitespace=False,as_recarray=None,compact_ints=None,use_unsigned=None,low_memory=True,buffer_lines=None,memory_map=False,float_precision=None)1.讀取CSV文件到DataFrame10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在上述語法中,常用的參數(shù)介紹如下。(1)filepath_or_buffer:可以是URL,可用URL類型包括HTTP、FTP、S3和文件。(2)sep:指定分隔符。如果不指定參數(shù),則會嘗試使用逗號分隔。分隔符長于一個字符并且不是'\s+'的,將使用Python的語法分析器,并且忽略數(shù)據(jù)中的逗號。(3)delimiter:定界符,備選分隔符(如果指定該參數(shù),則sep參數(shù)失效),默認為None。(4)header:指定行數(shù)用來作為列名,數(shù)據(jù)開始行數(shù)。如果文件中沒有列名,則默認為0,否則設(shè)置為None。(5)names:表示結(jié)果的列名列表,如果數(shù)據(jù)文件中沒有列標題行,就需要執(zhí)行header=None。默認列表中不能出現(xiàn)重復,除非設(shè)定參數(shù)mangle_dupe_cols=True。(6)index_col:用作行索引的列編號或者列名,如果給定一個序列,則有多個行索引。(7)encoding:指定字符集類型,通常指定為'utf-8'。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在下面的示例中,創(chuàng)建一個文件名稱為user.csv的文本文件,文件內(nèi)容如下:

Alice,23Mary,34Anna,28【示例10.6】使用read_csv方法讀取該CSV文件。importpandasaspdprint(pd.read_csv("user.csv",names=['name','age'],delimiter=','))10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫read_csv方法的使用如圖10.40所示。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫2.將DataFrame對象寫入CSV文件中在Pandas模塊中,CSV文件使用to_csv方法寫入?!菊Z法】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=None,quoting=None,quotechar='"',line_terminator='\n',chunksize=None,tupleize_cols=False,date_format=None,doublequote=True,escapechar=None,decimal='.',**kwds)10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫在上述語法中,常用的參數(shù)介紹如下:(1)path_or_buf:可以是URL,可用URL類型包括HTTP、FTP、S3和文件。(2)sep:指定分隔符。如果不指定參數(shù),則會嘗試使用逗號分隔。分隔符長于一個字符并且不是'\s+'的,將使用Python的語法分析器,并且忽略數(shù)據(jù)中的逗號。10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫【示例10.7】使用to_csv方法寫入到CSV文件。frompandasimportDataFramedf=DataFrame({'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]})print("DataFrame對象為:\n",df)print(df.to_csv("test.csv",index=False,sep=","))10.3Pandas讀寫數(shù)據(jù)1CSV文件的讀寫to_csv方法的使用如圖10.41所示。打開test.csv,內(nèi)容如圖10.42所示。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫使用Pandas讀寫Excel文件,需要安裝openpyxl、xlsxwriter和xlrd這3個第三方庫,與其他的庫安裝方式相同,可以使用PyCharm工具或者pip命令安裝。下面介紹以上3個第三方庫的安裝方法:(1)openpyxl:模塊openpyxl源于PHPExcel,它提供了針對.xlsx文件的讀寫功能,可以在命令行中執(zhí)行“pipinstallopenpyxl”命令進行安裝。(2)xlsxwriter:用來寫入內(nèi)容到.xlsx文件中??梢栽诿钚兄袌?zhí)行“pipinstallxlsxwriter”安裝。(3)xlrd:用來讀取.xls和.xlsx文件中的數(shù)據(jù),可以在命令行中執(zhí)行“pipinstallxlrd”安裝。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫在Pandas模塊中,使用read_excel方法讀取Excel文件。【語法】1.讀取Excelpandas.read_excel(io,sheetname=0,header=0,skiprows=None,skip_footer=0,index_col=None,names=None,parse_cols=None,parse_dates=False,date_parser=None,na_values=None,thousands=None,convert_float=True,has_index_names=None,converters=None,engine=None,squeeze=False,**kwds)10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫在上述語法中,常用的參數(shù)說明如下:(1)sheetname:表示表格的名稱或索引,為0表示讀取第一頁,也可以傳入讀取表格的名稱。(2)names:表示結(jié)果的列名列表,默認為None。(3)index_col:用作行索引的列編號或者列名,如果給定一個序列,則有多個行索引。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫例如,在本地E盤創(chuàng)建一個Excel文件,文件名為user.xlsx,內(nèi)容見表10.4。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫使用read_excel方法讀取該Excel文件,見示例10.8。importpandasaspdprint(pd.read_excel("E:\\user.xlsx",names=["name","age"]))read_excel方法的使用如圖10.43所示。10.3Pandas讀寫數(shù)據(jù)2Excel文件的讀寫2.寫入Excel在Pandas模塊中,使用DataFrame對象提供的to_excel方法寫入內(nèi)容到Excel文件中。to_excel(self,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,encoding=None,inf_rep='inf',verbose=True,freeze_panes=None)【語法】在以上語法中,常用參數(shù)介紹如下:(1)excel_writer:表示需要寫入到Excel文件的路徑及文件名。(2)sheet_name:表示表格的名稱。(3)columns:表示表格的列名。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫目前,數(shù)據(jù)庫大部分都屬于關(guān)系型的數(shù)據(jù)庫,而編程語言大部分使用的數(shù)據(jù)是基于對象的,通過ORM(對象關(guān)系映射)技術(shù)可以實現(xiàn)數(shù)據(jù)庫和編程語言之間數(shù)據(jù)的轉(zhuǎn)換。在Python中,最有名的ORM框架是SQLAlchemy。使用SQLAlchemy寫入數(shù)據(jù)到數(shù)據(jù)庫中的步驟如下:(1)使用PyCharm工具或者pip命令安裝SQLAlchemy庫。使用pip命令安裝SQLAlchemy庫可以在命令行工具中執(zhí)行“pipinstallsqlalchemy”命令進行安裝。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫(2)導入SQLAlchemy模塊中的create_engine方法和Pandas模塊,代碼如下:importpandasaspdfromsqlalchemyimportcreate_engine#引入create_engine方法(3)創(chuàng)建引擎,其中傳入的字符串格式為:數(shù)據(jù)庫類型+Python連接MySQL的庫名://用戶名:密碼@IP地址:端口號/數(shù)據(jù)庫名。例如,在示例10.9中,使用PyMySQL連接,需安裝PyMySQL,用戶名為root,密碼為123456,數(shù)據(jù)庫名為userdb,代碼如下:conn=create_engine('mysql+pymysql://root:123456@localhost:3306/newsdb?charset=utf8')10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫(4)使用Pandas的io.sql模塊下的to_sql方法,將DataFrame對象中的數(shù)據(jù)保存到數(shù)據(jù)庫中,其中num表示表名,newsdb表示數(shù)據(jù)庫名,代碼如下:pd.io.sql.to_sql(df,'num',conn,schema='newsdb',if_exists='append')(5)使用Pandas模塊中的read_sql方法讀取數(shù)據(jù)庫中的記錄并保存到DataFrame對象中,代碼如下:df1=pd.read_sql('select*fromnum;',con=conn)10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫【示例10.9】數(shù)據(jù)庫的讀寫操作。frompandasimportDataFrameimportpandasaspdfromsqlalchemyimportcreate_engine#引入create_engine方法df=DataFrame({1:['Anna','Alice','Tom'],2:[23,27,56]})conn=create_engine('mysql+pymysql://root:123456@localhost:3306/userdb?charset=utf8')#將df對象的數(shù)據(jù)保存到user表中pd.io.sql.to_sql(df,'num',conn,schema='userdb',if_exists='append')#從數(shù)據(jù)庫中讀取user表記錄保存到DataFrame對象中df1=pd.read_sql('select*fromnum;',con=conn)print(df1)10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫數(shù)據(jù)庫的讀寫操作的運行結(jié)果如圖10.44所示。10.3Pandas讀寫數(shù)據(jù)3MySQL數(shù)據(jù)庫的讀寫保存到UserDB數(shù)據(jù)庫中user表數(shù)據(jù)如圖10.45所示。10.3Pandas讀寫數(shù)據(jù)4學生實踐練習1.需求說明定義一個字典對象,內(nèi)容為“{"人民":3,"群眾":2,"公平":4,"正義":6}”,將該對象轉(zhuǎn)化為DataFrame對象,將DataFrame對象分別保存到CSV文件、Excel文件和MySQL數(shù)據(jù)庫中,并分別以3種方式讀取其中的內(nèi)容,轉(zhuǎn)化為新的DataFrame對象。2.實現(xiàn)思路(1)使用DataFrame對象中的to_csv方法將對象中的內(nèi)容保存到CSV文件中。(2)使用Pandas模塊中的read_csv方法讀取CSV文件中的內(nèi)容,并轉(zhuǎn)化為DataFrame對象。10.3Pandas讀寫數(shù)據(jù)4學生實踐練習(3)使用DataFrame對象中的to_excel方法將對象中的內(nèi)容保存到Excel文件中。(4)使用Pandas模塊中的read_excel方法讀取Excel文件中的內(nèi)容,并轉(zhuǎn)化為DataFrame對象。(5)使用“pd.io.sql.to_sql(df,'words',conn,schema='newsdb',if_exists='append')”語句將DataFrame對象保存到MySQL數(shù)據(jù)庫中。(6)使用Pandas模塊中的read_sql方法從數(shù)據(jù)庫中讀取數(shù)據(jù)并保存在DataFrame對象中。知識架構(gòu)10.4Pandas和Matplotlib繪圖2Pandas繪圖3學生實踐練習Matplotlib繪圖110.4Pandas和Matplotlib繪圖1Matplotlib繪圖1.Matplotlib安裝Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創(chuàng)建海量類型的2D圖表和一些基本的3D圖表。Matplotlib最早是為了可視化癲癇病人的腦皮層電圖相關(guān)的信號而研發(fā)的,因為在函數(shù)的設(shè)計上參考了MATLAB,所以叫作Matplotlib。Matplotlib首次發(fā)表于2007年,在開源和社區(qū)的推動下,目前在基于Python的各個科學計算領(lǐng)域都得到了廣泛應用。Matplotlib的安裝和其他第三方庫的安裝方式相同,可以使用pip命令和PyCharm工具進行安裝。下面將分別介紹這兩種安裝方式。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖1)使用pip命令安裝將Python的Scripts目錄添加到Path環(huán)境變量中,打開命令行工具,執(zhí)行“pipinstallmatplotlib”命令進行安裝。2)使用PyCharm工具進行安裝依次單擊菜單中的“File”→“Settings…”,打開PyCharm的設(shè)置界面,單擊設(shè)置界面的“Project工程名”(此處為“Projectchapter10”)下的“ProjectInterpreter”菜單,如圖10.48所示,單擊“+”按鈕添加Matplotlib庫。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖2.Matplotlib畫圖Matplotlib中最基礎(chǔ)的模塊是pyplot,可以使用“importmatplotlib.pyplotasplt”語句導入pyplot模塊,并取該模塊的別名為plt。使用pyplot模塊中的plot方法實現(xiàn)折線圖的繪制。【示例10.10】實現(xiàn)簡單折線圖的繪制。#導入pyplot模塊,并取該模塊的別名為pltimportmatplotlib.pyplotasplt#設(shè)置3個坐標:1,52,7和3,4plt.plot([1,2,3],[5,7,4])plt.show()#顯示折線圖10.4Pandas和Matplotlib繪圖1Matplotlib繪圖折線圖的運行后效果如圖10.49所示。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖很多時候,雖然根據(jù)圖就可以看出一些信息,但是圖形帶有標題、軸域上的標簽和圖例,解釋該圖的作用也非常有必要。在plot方法中添加label參數(shù)可以指定線條的名稱,通過title方法指定圖表的名稱,使用xlabel指定橫坐標的名稱,使用ylabel指定縱坐標的名稱,具體使用方式見示例10.11。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖【示例10.11】importmatplotlibasmplmpl.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標簽mpl.rcParams['axes.unicode_minus']=False#用來正常顯示負號#導入pyplot模塊,并取該模塊的別名為pltimportmatplotlib.pyplotasplt#設(shè)置3個坐標:1,52,7和3,4plt.plot([1,2,3],[5,7,4])plt.xlabel(u'x軸')#設(shè)置橫坐標的名稱plt.ylabel(u'y軸')#設(shè)置縱坐標的名稱plt.title(u'圖表')#指定圖表的標題plt.legend()#生成默認的圖例plt.show()10.4Pandas和Matplotlib繪圖1Matplotlib繪圖折線圖運行后的效果如圖10.50所示。圖10.50中

允許以各種形式保存圖形。

允許對圖形和繪圖配置各種間距選項。importmatplotlibasmplmpl.rcParams['font.sans-serif']=['SimHei']#用來正常顯示中文標簽mpl.rcParams['axes.unicode_minus']=False#用來正常顯示負號importmatplotlib.pyplotaspltbar_width=0.35opacity=0.4plt.bar([1,2,3],[5,7,4],bar_width,alpha=opacity,color='b',label=u'橫坐標')plt.show()10.4Pandas和Matplotlib繪圖1Matplotlib繪圖plot()方法中還可以傳入多個參數(shù),其中第三個參數(shù)表示線條的顏色及類型,如傳入“r-”值表示紅色的實線,其中“r”表示紅色,“b”表示藍色,“-”表示實線,“-.”表示點畫線,“:”表示虛線,“None”表示什么都不畫。第4個參數(shù)表示線條的寬度?!臼纠?0.12】使用plt.plot([1,2,3],[5,7,4],'r-',lw=2.5)語句輸出紅色的實線,線條的寬度為2.5。使用Matplotlib畫柱狀圖時需要使用pyplot模塊中的bar()方法。10.4Pandas和Matplotlib繪圖1Matplotlib繪圖柱狀圖運行后的效果如圖10.51所示。除了折線圖和柱狀圖,Matplotlib還可以繪制餅圖、散點圖等。10.4Pandas和Matplotlib繪圖2Pandas繪圖1.線形圖Series和DataFrame都有一個用于生成各類圖標的plot方法,默認情況下,生成的是線型圖?!臼纠?0.13】創(chuàng)建一個Series對象和DataFrame對象,并生成線形圖。frompandasimportSeries,DataFrameimportnumpyasnpimportmatplotlib.pyplotasplts=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))s.plot()plt.show()df=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))df.plot()#繪制效果如下plt.show()10.4Pandas和Matplotlib繪圖2Pandas繪圖Series和DataFrame的折線圖顯示如圖10.52所示,其中左側(cè)的圖表為Series對象由示例10.13可以看出,Series對象的索引會被傳給Matplotlib,并用以繪制X軸,可以通過use_index=False禁用該功能。X軸的刻度和界限可以通過xticks和xlim選項進行調(diào)節(jié)。Y軸就用yticks和ylim進行調(diào)節(jié)。10.4Pandas和Matplotlib繪圖2Pandas繪圖2.柱狀圖Series和DataFrame也可以繪制柱狀圖,與折線圖類似,它也使用plot()方法繪制。不過繪制柱狀圖需要在plot()方法中傳入kind參數(shù)。plot()方法的參數(shù)見表10.5。10.4Pandas和Matplotlib繪圖2Pandas繪圖在DataFrame對象的plot方法中還有一些獨有的參數(shù),見表10.6。10.4Pandas和Matplotlib繪圖2Pandas繪圖在生成線形圖的代碼中,加上kind='bar'(垂直柱狀圖)或kind='barh'(水平柱狀圖)即可生成柱狀圖?!臼纠?0.14】創(chuàng)建一個Series對象和DataFrame對象,并生成柱狀圖。frompandasimportSeries,DataFrameimportnumpyasnpimportmatplotlib.pyplotasplts=Series(np

溫馨提示

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

評論

0/150

提交評論