




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)存儲(chǔ)文件存儲(chǔ)CSVXMLJSONExcel關(guān)系型數(shù)據(jù)庫(kù)非關(guān)系型數(shù)據(jù)庫(kù)目錄1.1數(shù)據(jù)存儲(chǔ)的重要性在很多大數(shù)據(jù)處理的應(yīng)用中,數(shù)據(jù)都是在文件或數(shù)據(jù)庫(kù)中保存的。大數(shù)據(jù)處理的中間結(jié)果也需要保存在持久化的存儲(chǔ)中。對(duì)數(shù)據(jù)的讀寫(xiě)操作是計(jì)算機(jī)處理的基礎(chǔ),本章將介紹如何使用Python進(jìn)行數(shù)據(jù)的讀寫(xiě)相關(guān)操作。從數(shù)據(jù)訪問(wèn)的方式來(lái)分,數(shù)據(jù)存儲(chǔ)主要可以分為文件,數(shù)據(jù)庫(kù)及Python對(duì)象存儲(chǔ)三類(lèi)。一、數(shù)據(jù)存儲(chǔ)常用文件格式CSVXMLJSONExcel二、文件數(shù)據(jù)存儲(chǔ)2.1文件存儲(chǔ)常用格式數(shù)據(jù)可以存儲(chǔ)在不同類(lèi)型的文件中。常見(jiàn)的用于數(shù)據(jù)保存和傳輸?shù)奈募袷桨╰xt、csv、JSON、XML、Word、Pdf、Excel等。JSON,txt,csv,和XML都屬于文本文件,其中的內(nèi)容用文本編輯器打開(kāi)可以直接閱讀。Word,Excel,Pdf等是二進(jìn)制文件,需要用對(duì)應(yīng)的閱讀工具打開(kāi)。在實(shí)際的網(wǎng)絡(luò)環(huán)境中,網(wǎng)站提供數(shù)據(jù)一般保存在CSV(逗號(hào)分隔符文件)、Excel、JSON(JavaScript對(duì)象符號(hào))、XML(可擴(kuò)展標(biāo)記語(yǔ)言)這四種格式的文件中。二、文件數(shù)據(jù)存儲(chǔ)常用數(shù)據(jù)獲取網(wǎng)站常用數(shù)據(jù)格式美國(guó)政府公開(kāi)數(shù)據(jù)的網(wǎng)站CSV、Excel、JSON、和XMLkaggleCSV天池大數(shù)據(jù)競(jìng)賽Excel、CSV格式kesciCSVpython讀寫(xiě)不同格式的文件的方法:根據(jù)文件格式的規(guī)定編寫(xiě)自己的文件讀寫(xiě)函數(shù)。使用Python標(biāo)準(zhǔn)庫(kù)python第三方庫(kù)。Python對(duì)于不同格式的文件,提供了對(duì)應(yīng)的庫(kù)來(lái)操作,如表所示。這些庫(kù)根據(jù)不同文件類(lèi)型的內(nèi)部格式從文件中讀寫(xiě)數(shù)據(jù)二、文件數(shù)據(jù)存儲(chǔ)文件格式內(nèi)置庫(kù)
第三方庫(kù)csvcsvnumpy,pandas等JSONjsonPickle/ujson/pandas等XMLxmllxml等Excel無(wú)Xlrd/Xlwt/pandas等Word無(wú)python-docx/win32com等Pdf無(wú)pdfminer/pyPDF2等2.2CSV格式CSV(Comma-SeparatedValues)是逗號(hào)分隔符文件格式。組織結(jié)構(gòu)如下:由任意數(shù)目的記錄組成記錄間以某種換行符分隔。每條記錄由字段組成字段間的分隔符是其它字符或字符串,最常見(jiàn)的是逗號(hào)或制表符。在數(shù)據(jù)庫(kù)或電子表格中,最常見(jiàn)的導(dǎo)入導(dǎo)出文件格式就是CSV文件格式。CSV格式的文件可以用多種軟件打開(kāi),常見(jiàn)的txt或者Excel,txt打開(kāi)時(shí)會(huì)顯示出逗號(hào),Excel會(huì)自動(dòng)將每個(gè)逗號(hào)隔開(kāi)的數(shù)據(jù)作為一列在Excel中顯示。CSV文件的兩種操作方式:標(biāo)準(zhǔn)庫(kù):csv模塊第三方庫(kù):NumPy、Pandas模塊二、文件數(shù)據(jù)存儲(chǔ)——CSV二、文件數(shù)據(jù)存儲(chǔ)——CSV機(jī)器學(xué)習(xí)中的鳶尾花數(shù)據(jù)集的常見(jiàn)格式就是CSV。這個(gè)數(shù)據(jù)集一共五列,分別是花萼長(zhǎng)度(Sepal.Length)、花萼寬度(Sepal.Width)、花瓣長(zhǎng)度(Petal.Length)、花瓣寬度(Petal.Width)以及種類(lèi)(Setosa,Versicolour,Virginica),共有150個(gè)樣本,每個(gè)種類(lèi)50個(gè)樣本。下面是用txt和Excel打開(kāi)的鳶尾花數(shù)據(jù)集部分?jǐn)?shù)據(jù)。二、文件數(shù)據(jù)存儲(chǔ)——CSV2.2.1csv模塊Python標(biāo)準(zhǔn)庫(kù)的csv模塊封裝了很多常用的操作csv的功能,其中csv.reader、
csv.write分別用于讀取、寫(xiě)入操作。defreader(csvfile,dialect='excel',**fmtparams)參數(shù):csvfile:必須是支持迭代(Iterator)的對(duì)象,可以是文件(file)對(duì)象或者列表(list)對(duì)象dialect:編碼風(fēng)格,默認(rèn)為excel的風(fēng)格,也就是用逗號(hào)(,)分隔,dialect方式也支持自定義fmtparams:一系列參數(shù)列表,主要用于設(shè)置特定的格式,以覆蓋dialect中的格式。返回值:reader返回值是一個(gè)csv.reader類(lèi)型,CSV文件中的每一行就是一個(gè)元素。二、文件數(shù)據(jù)存儲(chǔ)——CSV下面代碼的功能是讀取并打印鳶尾花文件的內(nèi)容二、文件數(shù)據(jù)存儲(chǔ)——CSV使用csv.write()函數(shù)可獲得一個(gè)csv.writer對(duì)象,然后該對(duì)象的方法可以將數(shù)據(jù)寫(xiě)入csv文件。defwriter(csvfile,dialect='excel',**fmtparams)參數(shù):參數(shù)和意義同csv.reader返回值:writer的返回值是一個(gè)csv.writer類(lèi)型,CSV文件中的每一行就是一個(gè)元素二、文件數(shù)據(jù)存儲(chǔ)——CSV2.2.2pandas讀寫(xiě)csv文件Pandas使用read_csv()方法讀取csv文件,to_csv()方法將數(shù)據(jù)寫(xiě)入csv文件中。defread_csv(filepath_or_buffer,sep=',',delimiter=None,header='infer',names=None,…)常用參數(shù):filepath_or_buffer:文件路徑或數(shù)據(jù)緩存地址;sep:指定分隔符,如果不指定參數(shù),默認(rèn)使用逗號(hào)分隔;delimiter:定界符,備選分隔符,默認(rèn)為None,如果指定該參數(shù),則sep參數(shù)失效;header:指定行數(shù)用來(lái)作為列名,數(shù)據(jù)開(kāi)始行數(shù)。read_csv()函數(shù)有超過(guò)50個(gè)參數(shù),當(dāng)需要處理不太常見(jiàn)的csv格式時(shí)可以直接查詢(xún)pandas文檔。二、文件數(shù)據(jù)存儲(chǔ)——CSVPandas使用to_csv()方法將數(shù)據(jù)寫(xiě)入csv文件中:def
to_csv(path_or_buf=None,sep=",“,columns=None,header=True,index=True):常用參數(shù)說(shuō)明:path_or_buf=None:路徑或?qū)ο?,如果沒(méi)有提供,結(jié)果將返回為字符串;columns:順序,可選列寫(xiě)入;header:寫(xiě)出列名,如果給定字符串列表,則假定為列名的別名,默認(rèn)為true;index:寫(xiě)入行名稱(chēng)(索引),默認(rèn)為T(mén)ure;encoding:表示在輸出文件中使用的編碼的字符串,Python2上默認(rèn)為“ASCII”和Python3上默認(rèn)為“UTF-8”;二、文件數(shù)據(jù)存儲(chǔ)——XML2.3XML格式2.3.1什么是XML文件XML可擴(kuò)展標(biāo)記語(yǔ)言(eXtensibleMarkupLanguage),是一種常見(jiàn)的支持分層、嵌套數(shù)據(jù)以及元數(shù)據(jù)的結(jié)構(gòu)化數(shù)據(jù)格式,它可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類(lèi)型,是一種允許用戶(hù)對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。XML文件分為兩類(lèi):Well-FormedXML文件ValidatingXML文件。如果一個(gè)文件滿(mǎn)足XML規(guī)范中的規(guī)則,那么就是Well-FormedXML文件;如果一個(gè)文件滿(mǎn)足XML規(guī)范中的規(guī)則且使用了DTD(DocumentTypeDefinition),則此XML文件稱(chēng)為ValidatingXML文件。DTD實(shí)際上是XML文件的模板,XML文件中包含的元素,元素的順序,元素的內(nèi)容以及元素的屬性都必須符合DTD中的定義。DTD文件必須根據(jù)實(shí)際情況來(lái)進(jìn)行制定,想要制定一份完整性高、適應(yīng)性廣的DTD文件是很難的,覆蓋的范圍越廣,制定就越困難。
二、文件數(shù)據(jù)存儲(chǔ)——XMLXML文件由元素組成,每個(gè)元素包括一個(gè)開(kāi)始標(biāo)記一個(gè)結(jié)束標(biāo)記以及兩個(gè)標(biāo)記之間的內(nèi)容;標(biāo)記是對(duì)文檔存儲(chǔ)格式和邏輯結(jié)構(gòu)的描述。在形式上,標(biāo)記中可能包括注釋、引用、字符數(shù)據(jù)段、起始標(biāo)記、結(jié)束標(biāo)記、空元素、文檔類(lèi)型聲明(DTD)和序言。具體規(guī)則如下:必須有聲明語(yǔ)句:聲明語(yǔ)句是XML文檔的第一句,其格式如下:<?xmlversion="1.0"encoding="utf-8"?>大小寫(xiě):在XML文檔中,大小寫(xiě)是有區(qū)別的。XML文檔有且只有一個(gè)根元素:XML文檔必須有一個(gè)根元素,就是緊接著聲明后面建立的第一個(gè)元素,根元素完全包括文檔中其他所有的元素。屬性值使用引號(hào)所有的標(biāo)記必須有相應(yīng)的結(jié)束標(biāo)記所有的空標(biāo)記也必須被關(guān)閉二、文件數(shù)據(jù)存儲(chǔ)——XML下面是一個(gè)XML文件:二、文件數(shù)據(jù)存儲(chǔ)——XML2.3.2XML文件解析XML文件解析有下面兩種方式:Python標(biāo)準(zhǔn)庫(kù):xml包第三方庫(kù):lxml二、文件數(shù)據(jù)存儲(chǔ)——XMLPython標(biāo)準(zhǔn)庫(kù)中的xml包可以解析Well-Formed、Validating兩類(lèi)XML文件。xml包中最常用的是下面三個(gè)子包:(1)DOM包:DocumentObjectModel,它能夠?qū)ML數(shù)據(jù)在內(nèi)存中解析成一個(gè)樹(shù),然后通過(guò)對(duì)樹(shù)的操作來(lái)操作XML。但是這種方式是將XML數(shù)據(jù)映射到內(nèi)存中的樹(shù),所以速度比較慢、消耗更多的內(nèi)存。(2)SAX包:simpleAPIforXML,SAX以流式讀取XML文件,不會(huì)將整個(gè)文件讀取到內(nèi)存中,只讀取需要部分的內(nèi)容,速度快,占用內(nèi)存少,但是在操作上稍微復(fù)雜,需要用戶(hù)實(shí)現(xiàn)回調(diào)函數(shù)。(3)elementTree包:使用ElementTree類(lèi)來(lái)表示整個(gè)XML文檔,使用Element類(lèi)來(lái)表示XML的一個(gè)結(jié)點(diǎn)。對(duì)整個(gè)XML文檔的操作一般是對(duì)ElementTree對(duì)象進(jìn)行,而對(duì)XML結(jié)點(diǎn)的操作一般是對(duì)Element對(duì)象進(jìn)行。elementTree模型相對(duì)來(lái)說(shuō)使用比較簡(jiǎn)單,接口也較友好,下面簡(jiǎn)單介紹ElementTree類(lèi)、
Element類(lèi)的常用屬性和方法。二、文件數(shù)據(jù)存儲(chǔ)——XMLelement模塊中的常用方法和屬性列在下面的表函數(shù)描述Element()生成一個(gè)節(jié)點(diǎn)root.find(node)獲得root節(jié)點(diǎn)中的第一個(gè)node子節(jié)點(diǎn)root.findtext(node)獲取root節(jié)點(diǎn)中的第一個(gè)node子節(jié)點(diǎn)的內(nèi)容root.findall(node)獲取root節(jié)點(diǎn)中的所有node子節(jié)點(diǎn)root.iter(node)獲取root節(jié)點(diǎn)中node節(jié)點(diǎn),并為之創(chuàng)建一個(gè)迭代器for循環(huán)root.tagroot節(jié)點(diǎn)的名稱(chēng)root.textroot節(jié)點(diǎn)的內(nèi)容root.attribroot節(jié)點(diǎn)的屬性root.get(attr)獲取root節(jié)點(diǎn)中屬性attr的值root.items()獲取root節(jié)點(diǎn)中所有的屬性值,每對(duì)屬性都是鍵值對(duì)root.keys()獲取root節(jié)點(diǎn)所有屬性的keys,返回列表root.append(node)向root節(jié)點(diǎn)加入node子節(jié)點(diǎn)root.set(att,value)設(shè)置root節(jié)點(diǎn)的屬性attr的值為value二、文件數(shù)據(jù)存儲(chǔ)——XMLelementTree模塊中的常用方法和屬性列在下面的表函數(shù)描述find()與getroot().find()相同,即Element.find()findall()與getroot().findall()相同,即Element.findall()findtext()與getroot().findtext()相同,即Element.findtext()getroot()獲得根節(jié)點(diǎn)parse()將外部XML文檔加載到元素樹(shù)中write()將元素樹(shù)作為XML寫(xiě)入文件。二、文件數(shù)據(jù)存儲(chǔ)——XML2.3.3XML文件存儲(chǔ)XML的寫(xiě)操作比解析操作要簡(jiǎn)單很多,主要步驟如下:(1)創(chuàng)建Element節(jié)點(diǎn)(2)設(shè)置節(jié)點(diǎn)的屬性和節(jié)點(diǎn)的值(3)然后加入到其父節(jié)點(diǎn)中或添加其子節(jié)點(diǎn)(如果此節(jié)點(diǎn)是根節(jié)點(diǎn)就只需要添加子節(jié)點(diǎn),如果此節(jié)點(diǎn)是葉子節(jié)點(diǎn)就只需要添加到其父節(jié)點(diǎn))。二、文件數(shù)據(jù)存儲(chǔ)——JSON2.4.1什么是JSONJSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C,C++,C#,Java,JavaScript,Perl,Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言,已成為通過(guò)http請(qǐng)求在網(wǎng)站和應(yīng)用程序間交換數(shù)據(jù)的標(biāo)準(zhǔn)格式之一。二、文件數(shù)據(jù)存儲(chǔ)——JSON2.4.2JSON結(jié)構(gòu)JSON有兩種結(jié)構(gòu):(1)“name/value”對(duì)的集合。結(jié)構(gòu)上類(lèi)似于python中的字典(dictionary)類(lèi)型:以“{”開(kāi)始,以“}”結(jié)束,每個(gè)name后跟一個(gè)“:”,“name/value對(duì)”之間使用“,”分隔。(2)值的有序列表。結(jié)構(gòu)上類(lèi)似于python中的數(shù)組(array)類(lèi)型:以“[”開(kāi)始,“]”結(jié)束,值之間使用“,”分隔。其中name必須是字符串,value可以是字符串(string)、數(shù)值(number)、對(duì)象(object)或者數(shù)組(array)、bool值(true、false)、null,這些結(jié)構(gòu)之間可以相互嵌套。下面是一個(gè)JSON數(shù)據(jù)的例子。二、文件數(shù)據(jù)存儲(chǔ)——JSON下面是一個(gè)JSON數(shù)據(jù)的例子。除其空值null和一些其他的細(xì)微差別(如列表末尾不允許存在多余的逗號(hào))之外,JSON非常接近于有效的Python代碼。二、文件數(shù)據(jù)存儲(chǔ)——JSON2.4.3JSON數(shù)據(jù)存儲(chǔ)Python標(biāo)準(zhǔn)庫(kù):jsonPython第三方庫(kù):Pandas二、文件數(shù)據(jù)存儲(chǔ)——JSONPython標(biāo)準(zhǔn)庫(kù)中的json模塊有四個(gè)專(zhuān)門(mén)處理JSON的函數(shù):dump、dumps、load、loads,其函數(shù)的描述如所示:函數(shù)描述load()從json文件中讀取數(shù)據(jù),將JSON格式數(shù)據(jù)轉(zhuǎn)換為Python的數(shù)據(jù)類(lèi)型loads()將JSON格式的字符串?dāng)?shù)據(jù)轉(zhuǎn)換為Python的數(shù)據(jù)類(lèi)型dump()將Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換為JSON數(shù)據(jù),存儲(chǔ)到j(luò)son文件dumps()將Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換為JSON格式的字符串?dāng)?shù)據(jù)二、文件數(shù)據(jù)存儲(chǔ)——JSONpython和JSON數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,可以看成編碼與解碼。其中l(wèi)oad、loads可以看做是解碼過(guò)程,dump、dumps可以看做是編碼,對(duì)應(yīng)關(guān)系見(jiàn)表。編碼解碼PythonJSONPythondictobjectdictlist,tuplearrayliststrstringstrint,int--derivedEnumsnumber(int)intfloat,float-derivedEnumsnumber(real)floatTruetrueTrueFalsefalseFalseNonenullNone二、文件數(shù)據(jù)存儲(chǔ)——JSONPython使用load()和loads()函數(shù)將JSON數(shù)據(jù)轉(zhuǎn)換為Python數(shù)據(jù)類(lèi)型。defload(fp,*,cls=None,object_hook=None):defloads(s,*,encoding=None,cls=None,object_hook=None):json.loads()主要的參數(shù):encoding=None:編碼方式;object_hook=None:該函數(shù)負(fù)責(zé)把反序列化后的基本類(lèi)型對(duì)象轉(zhuǎn)換成自定義類(lèi)型的對(duì)象;返回值:JSON格式對(duì)應(yīng)的Python數(shù)據(jù)類(lèi)型,對(duì)應(yīng)關(guān)系參考表。json.load()的主要參數(shù):fp:fp為使用withopen讀文件的as別名;其余參數(shù)同loads()。返回值:JSON格式對(duì)應(yīng)的Python數(shù)據(jù)類(lèi)型,對(duì)應(yīng)關(guān)系參考表。二、文件數(shù)據(jù)存儲(chǔ)——JSONPython使用dump()和dumps()函數(shù)將Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換為JSON數(shù)據(jù)。defdumps(obj,*,skipkeys=False,ensure_ascii=True,allow_nan=True):defdump(obj,fp,*,skipkeys=False,ensure_ascii=True,allow_nan=True)json.dumps的主要參數(shù):obj:python對(duì)象;ensure_ascii=True:如果obj里包括非ASCII碼,True時(shí),編成ASCII碼;False時(shí),不進(jìn)行編碼,原樣輸出;allow_nan=True:False時(shí),對(duì)于序列化超出范圍的float值,嚴(yán)格遵守JSON規(guī)范,將是一個(gè)ValueError而不是使用JavaScript等價(jià)物(NaN,Infinity,-Infinity);返回值:Python數(shù)據(jù)類(lèi)型對(duì)應(yīng)的JSON格式的字符串?dāng)?shù)據(jù),對(duì)應(yīng)關(guān)系參考表。json.dump主要參數(shù)同dumps()。二、文件數(shù)據(jù)存儲(chǔ)——JSONpandas里的read_json()函數(shù)可以用來(lái)處理JSON數(shù)據(jù),這個(gè)函數(shù)將JSON數(shù)據(jù)轉(zhuǎn)化為DataFrame類(lèi)型。defread_json(path_or_buf=None,orient=None,typ='frame',dtype=True)主要參數(shù):path_or_buf:json文件路徑或者json格式的字符串;orient:表明預(yù)期的json字符串格式;二、文件數(shù)據(jù)存儲(chǔ)——JSONpandas里的to_json()函數(shù)可以用來(lái)寫(xiě)JSON文件,使用方式類(lèi)似于to_csv,就不介紹了。二、文件數(shù)據(jù)存儲(chǔ)——Excel2.5.1什么是ExcelExcel是一個(gè)電子表格軟件,可以用來(lái)存儲(chǔ)數(shù)據(jù)、制作電子表格、完成許多復(fù)雜的數(shù)據(jù)運(yùn)算,進(jìn)行數(shù)據(jù)的分析和預(yù)測(cè)并且具有強(qiáng)大的制作圖表的功能。Excel程序可以將XLS格式的表格轉(zhuǎn)換為多種格式:XML表格、XML數(shù)據(jù)、網(wǎng)頁(yè)、使用制表符分割的文本文件(*.txt)、使用逗號(hào)分隔的文本文件(*.csv)等文件格式,適用于不同的應(yīng)用程序。二、文件數(shù)據(jù)存儲(chǔ)——Excel2.5.2Excel文件的操作Python標(biāo)準(zhǔn)庫(kù)中不提供讀取Excel格式文件的功能,但是有很多第三方的庫(kù)提供了讀寫(xiě)Excel文件的功能。xlrd:從Excel文件中讀取數(shù)據(jù)的庫(kù),支持.xls以及.xlsx文件。xlwings:是一個(gè)可以實(shí)現(xiàn)從Excel調(diào)用Python,也可在python中調(diào)用Excel的庫(kù),xlwings支持.xls讀,支持.xlsx文件讀寫(xiě),支持Excel操作。win32com:一個(gè)讀寫(xiě)和處理Excel文件的庫(kù)。openpyxl:一個(gè)用于讀取和編寫(xiě)Excel2010xlsx、xlsm、xltx、xltm文件的庫(kù)。pandas:具有極其豐富的數(shù)據(jù)操作功能,簡(jiǎn)單實(shí)用,支持.xls,.xlsx文件的讀寫(xiě)。二、文件數(shù)據(jù)存儲(chǔ)——Excelpandas使用read_excel()函數(shù)讀取Excel文件并返回DataFrame對(duì)象。defpandas.read_excel(io,header=0,names=None,index_col=None,usecols=None,squeeze=False,dtype=None,engine=None,converters=None,…,**kwds)主要參數(shù):io:路徑對(duì)象;header:用于解析的DataFrame的列標(biāo)簽;skiprows:開(kāi)始時(shí)跳過(guò)的行(0索引);skip_footer:結(jié)束時(shí)的行(0-索引),默認(rèn)為0;index_col:列(0索引)用作DataFrame的行標(biāo)簽;names:要使用的列名列表;二、文件數(shù)據(jù)存儲(chǔ)——Excelpandas使用read_excel()函數(shù)讀取鳶尾花文件的代碼和結(jié)果如圖所示:二、文件數(shù)據(jù)存儲(chǔ)——ExcelPandas通過(guò)to_excel()方法將DataFrame的內(nèi)容寫(xiě)入Excel。defDataFrame.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,encoding=None,inf_rep='inf',verbose=True,freeze_panes=None)主要參數(shù):excel_writer:字符串或ExcelWriter對(duì)象,文件路徑或現(xiàn)有的ExcelWriter;sheet_name:字符串,默認(rèn)“Sheet1”,將包含DataFrame的表的名稱(chēng);float_format:字符串,默認(rèn)None,格式化浮點(diǎn)數(shù)的字符串;columns:序列,可選,要編寫(xiě)的列;header:布爾或字符串列表,默認(rèn)為T(mén)ure,寫(xiě)出列名。如果給定字符串列表,則假定它是列名稱(chēng)的別名;關(guān)系型數(shù)據(jù)庫(kù)SQLiteMYSQL三、關(guān)系型數(shù)據(jù)庫(kù)在Python的各個(gè)應(yīng)用領(lǐng)域中,無(wú)論是數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲(chóng)、Web開(kāi)發(fā),還是機(jī)器學(xué)習(xí),都離不開(kāi)和數(shù)據(jù)庫(kù)打交道。Python提供了很多數(shù)據(jù)庫(kù)(關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù))訪問(wèn)接口,通過(guò)這些接口Python可以很方便的訪問(wèn)數(shù)據(jù)庫(kù)。表中是python支持的訪問(wèn)的常用的數(shù)據(jù)庫(kù)。三、關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)種類(lèi)常用數(shù)據(jù)庫(kù)通用數(shù)據(jù)庫(kù)接口mxODBC、pyodbc、turbodbc、adodbapi關(guān)系型數(shù)據(jù)庫(kù)IBMDB2、Firebird、MYSQL
Oracle、PostgreSQl非關(guān)系數(shù)據(jù)庫(kù)Mongodb、ZODB、atop
buzhugPython操作關(guān)系數(shù)據(jù)庫(kù)的一般步驟:(1)導(dǎo)入模塊(2)建立連接通道:conn=數(shù)據(jù)庫(kù)驅(qū)動(dòng).connect()(3)創(chuàng)建游標(biāo),默認(rèn)是元組格式我們也可以設(shè)置返回結(jié)果是字典類(lèi)型,如下設(shè)置即為字典類(lèi)型:
cursor=conn.cursor(cursor=數(shù)據(jù)庫(kù)驅(qū)動(dòng).cursors.DictCursor)(4)操作數(shù)據(jù)庫(kù)的sql語(yǔ)句:
sql=""(5)向數(shù)據(jù)庫(kù)發(fā)送指令:格式化輸入的值可以按順序傳入或?qū)懗闪斜恚ㄗ⒁忭樞蚝臀恢茫?/p>
r=cursor.execute(sql,v1,v2……)
其中r代表接收返回受影響的行數(shù)(數(shù)字)及執(zhí)行這一條sql語(yǔ)句,數(shù)據(jù)庫(kù)中有多少行受到了影響。三、關(guān)系型數(shù)據(jù)庫(kù)3.2Sqlite數(shù)據(jù)庫(kù)SQLite是一種嵌入式數(shù)據(jù)庫(kù),它的數(shù)據(jù)庫(kù)就是一個(gè)文件。它最大的特點(diǎn)在于不需要單獨(dú)的服務(wù)、零配置。SQLite與MySQL、MongoDB這兩個(gè)數(shù)據(jù)庫(kù)不同。首先Python已經(jīng)將相應(yīng)的驅(qū)動(dòng)模塊sqlite3作為了標(biāo)準(zhǔn)庫(kù)的一部分,只要安裝了Python,就可以使用;再者它可以類(lèi)似于操作文件那樣來(lái)操作SQLite數(shù)據(jù)庫(kù)文件。三、關(guān)系型數(shù)據(jù)庫(kù)——Sqlite數(shù)據(jù)庫(kù)3.2.1Sqlite數(shù)據(jù)庫(kù)的操作Python定義了一套操作數(shù)據(jù)庫(kù)的API接口,任何數(shù)據(jù)庫(kù)要連接到Python,只需要提供符合Python標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)即可。按照python操作關(guān)系型數(shù)據(jù)庫(kù)的操作步驟來(lái)利用SQLite3模塊訪問(wèn)SQLite數(shù)據(jù)庫(kù)。Sqlite數(shù)據(jù)庫(kù)的基本操作有兩種:讀已有數(shù)據(jù)庫(kù)中內(nèi)容向數(shù)據(jù)庫(kù)中寫(xiě)數(shù)據(jù)三、關(guān)系型數(shù)據(jù)庫(kù)3.2.2從數(shù)據(jù)庫(kù)中讀數(shù)據(jù):從關(guān)系型數(shù)據(jù)庫(kù)中讀數(shù)據(jù)的方法主要有兩種:(1)手動(dòng)讀?。?)利用SQLAlchemy工具包。從不同的關(guān)系型數(shù)據(jù)庫(kù)中讀數(shù)據(jù)的方法和步驟是一樣的。三、關(guān)系型數(shù)據(jù)庫(kù)(1)手動(dòng)讀取執(zhí)行fetall()方法,即可得到要查詢(xún)的數(shù)據(jù),fetall()方法返回的是一個(gè)元組的列表。利用列表數(shù)據(jù)構(gòu)造pd.DataFrame,即可得到DataFrame數(shù)據(jù),接下來(lái)就可以對(duì)DataFrame進(jìn)行相關(guān)操作。但是在手動(dòng)讀取時(shí),每次查詢(xún)數(shù)據(jù)庫(kù)都需要重復(fù)同樣的步驟,比較復(fù)雜。三、關(guān)系型數(shù)據(jù)庫(kù)使用fetall()方法讀取建立好的data.db數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)中存放的就是鳶尾花數(shù)據(jù),然后將數(shù)據(jù)存儲(chǔ)到iris_sql_write.csv文件中。三、關(guān)系型數(shù)據(jù)庫(kù)iris_sql_write.csv文件中的部分?jǐn)?shù)據(jù):三、關(guān)系型數(shù)據(jù)庫(kù)(2)利用SQLAlchemy工具包SQLAlchemy項(xiàng)目是一個(gè)流行的PythonSQl工具包,抽象的去除了SQL數(shù)據(jù)庫(kù)之間許多常見(jiàn)的差異。SQLAlchemy本身無(wú)法操作數(shù)據(jù)庫(kù),必須以pymsql等第三方插件、Dialect用于和數(shù)據(jù)庫(kù)API進(jìn)行交流,根據(jù)配置文件的不同調(diào)用不同的數(shù)據(jù)庫(kù)API,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。常用的Dialect如表所示:三、關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)Dialectsqlite+pysqlitesqlite+pysqlite:///file_pathmysql+pymysqlmysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]mysql+mysqldbmysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>oracle+cx_oracleoracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]pandas有一個(gè)read_sql函數(shù)可以方便的從通用的SQLAlchemy連接中方面的讀取數(shù)據(jù)。read_sql函數(shù)的定義如下:defpandas.read_sql(sql,con,index_col=None,coerce_float=True,params=None,parse_dates=None,columns=None,chunksize=None)主要參數(shù)說(shuō)明:sql:SQL命令字符串。con:連接sql數(shù)據(jù)庫(kù)的engine,一般可以用SQLAlchemy或者pymysql之類(lèi)的包建立。index_col:選擇某一列作為index。三、關(guān)系型數(shù)據(jù)庫(kù)使用read_sql函數(shù)讀取建立好的data.db數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)中存放的就是鳶尾花數(shù)據(jù),然后將數(shù)據(jù)存儲(chǔ)到iris_sqla_write.csv文件中。代碼如下,結(jié)果是一樣的,這里就不在展示。三、關(guān)系型數(shù)據(jù)庫(kù)3.2.3向數(shù)據(jù)庫(kù)中寫(xiě)數(shù)據(jù):下面是把iris.csv中數(shù)據(jù)寫(xiě)入SQLite3中的例子
:
鳶尾花數(shù)據(jù)csv轉(zhuǎn)存為sqlite3,然后再?gòu)臄?shù)據(jù)庫(kù)中讀取。三、關(guān)系型數(shù)據(jù)庫(kù)數(shù)據(jù)清洗——噪聲數(shù)據(jù)處理從數(shù)據(jù)庫(kù)中讀取的鳶尾花數(shù)據(jù):三、關(guān)系型數(shù)據(jù)庫(kù)3.3MySQL數(shù)據(jù)庫(kù)MySQL因?yàn)槠渌俣取⒖煽啃院瓦m應(yīng)性而備受關(guān)注,其特點(diǎn)如下:所有的關(guān)系型數(shù)據(jù)庫(kù)中最流行的數(shù)據(jù)庫(kù);一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),使用最常用的數(shù)據(jù)庫(kù)管理語(yǔ)言--結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)庫(kù)管理;是開(kāi)放源代碼的,因此任何人都可以在GeneralPublicLicense的許可下下載并根據(jù)個(gè)性化的需要對(duì)其進(jìn)行修改。三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)3.3.1MySQL數(shù)據(jù)庫(kù)的操作Python使用原生模塊操作MYSQL,mysql的原生模塊有很多,但是最常用的就是下面三個(gè)模塊:MysqldbMysqlclientPymsql三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)mysqldb又稱(chēng)為MySQL-python,是Python連接MySQL最流行的一個(gè)原生模塊,但是它只支持Python2.x,而且安裝的時(shí)候有很多前置條件,因?yàn)樗腔贑開(kāi)發(fā)的庫(kù),在Windows平臺(tái)安裝非常不友好,經(jīng)常出現(xiàn)失敗的情況,現(xiàn)在基本不推薦使用。Mysqlclient是為了克服mysqldb的缺點(diǎn)而出現(xiàn)的mysqldb的衍生版本。mysqlclient完全兼容mysqldb,同時(shí)支持Python3.x。pymysql是純Python實(shí)現(xiàn)的,在Python3.x版本中用于連接MySQL服務(wù)器的一個(gè)模塊。pymysql最大的特點(diǎn)可能是它的安裝方式?jīng)]那么繁瑣,同時(shí)也兼容mysqldb。我們以pymysql連接數(shù)據(jù)庫(kù)為例介紹python是如何操作MYSQL數(shù)據(jù)庫(kù)的。三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)在這部分中,數(shù)據(jù)庫(kù)中要擁有下列數(shù)據(jù):(1)數(shù)據(jù)庫(kù)studentbd.(2)、studentdb數(shù)據(jù)庫(kù)中表student(3)、student表字段no、name、sex,age。(4)、數(shù)據(jù)庫(kù)studentdb使用的用戶(hù)名:“mysql”,密碼為"mysql"studentdb數(shù)據(jù)庫(kù)內(nèi)容:三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù):增加一條數(shù)據(jù)修改一條數(shù)據(jù)刪除三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù):db=pymysql.connect("localhost","root","mysql","studentdb")三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)增加一條數(shù)據(jù)向student中插入一條'20180006','zhangsan','m',20數(shù)據(jù),:三、關(guān)系型數(shù)據(jù)庫(kù)——MYSQL數(shù)據(jù)庫(kù)刪除一條數(shù)據(jù):刪除no=“20180005”的數(shù)據(jù)4.1NoSQl數(shù)據(jù)庫(kù)NoSQL(NotOnlySQL)意為不僅僅是SQL,NoSQL是基于鍵值對(duì)的關(guān)系,不需要經(jīng)過(guò)SQL層的解析,數(shù)據(jù)之間沒(méi)有耦合度,性能較高。NoSQl數(shù)據(jù)庫(kù)的主要代表有:MongoDB、Redis,CouchDB等。NoSQL非常適合存儲(chǔ)非結(jié)構(gòu)化數(shù)據(jù):這些數(shù)據(jù)通常用于模糊處理,如全文搜索、機(jī)器學(xué)習(xí)這些數(shù)據(jù)是海量的,而且增長(zhǎng)的速度是難以預(yù)期的,根據(jù)數(shù)據(jù)的特點(diǎn),NoSQL數(shù)據(jù)庫(kù)通常具有無(wú)限(至少接近)伸縮性按key獲取數(shù)據(jù)效率很高,但是對(duì)join或其他結(jié)構(gòu)化查詢(xún)的支持就比較差。四、非關(guān)系型數(shù)據(jù)庫(kù)NoSQL數(shù)據(jù)庫(kù)的一個(gè)典型存儲(chǔ)領(lǐng)域就是存取爬蟲(chóng)數(shù)據(jù)。因?yàn)閷?duì)于爬蟲(chóng)數(shù)據(jù)而言,每條數(shù)據(jù)都可能會(huì)在一些屬性字段上因?yàn)樘崛∈《笔?;?shù)據(jù)之間如果存在嵌套關(guān)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力行業(yè)員工薪酬福利合同
- 勞動(dòng)合同 月度范文
- 大型商業(yè)綜合體裝修合同
- 建筑工地安全施工合同書(shū)
- 廢舊物資循環(huán)利用合同項(xiàng)目2025
- 生產(chǎn)制造合同合作書(shū)
- 商品房購(gòu)回合同條款
- 房地產(chǎn)租賃管理合同范本
- 訂單班人才培養(yǎng)協(xié)議(范本)
- 無(wú)機(jī)鹽產(chǎn)品在農(nóng)業(yè)領(lǐng)域的應(yīng)用考核試卷
- 國(guó)企治理三會(huì)一層詳解
- 全國(guó)水資源綜合規(guī)劃技術(shù)細(xì)則(水利部文件)
- 2022年《國(guó)民經(jīng)濟(jì)行業(yè)分類(lèi)》
- 公司企業(yè)生產(chǎn)安全事故應(yīng)急預(yù)案演練計(jì)劃
- 人教鄂教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案
- 鋁合金鑄造基礎(chǔ)知識(shí)(課堂PPT)
- 診斷學(xué)課件:臨床常用免疫學(xué)檢測(cè)
- jw甲級(jí)設(shè)計(jì)院十六層醫(yī)院綜合樓全套電氣施工圖紙103張含多大樣圖
- 廣東專(zhuān)插本高等數(shù)學(xué)真題
- 云南省普通初中學(xué)生成長(zhǎng)記錄
- 仿真技術(shù)在車(chē)架防腐性能開(kāi)發(fā)中的應(yīng)用
評(píng)論
0/150
提交評(píng)論