利用Python读取外部数据文件
| 不論是數(shù)據(jù)分析,數(shù)據(jù)可視化,還是數(shù)據(jù)挖掘,一切的一切全都是以數(shù)據(jù)作為最基礎(chǔ)的元素。利用Python進(jìn)行數(shù)據(jù)分析,同樣最重要的一步就是如何將數(shù)據(jù)導(dǎo)入到Python中,然后才可以實(shí)現(xiàn)后面的數(shù)據(jù)分析、數(shù)據(jù)可視化、數(shù)據(jù)挖掘等。 在本期的Python學(xué)習(xí)中,我們將針對Python如何獲取外部數(shù)據(jù)做一個(gè)詳細(xì)的介紹,從中我們將會(huì)學(xué)習(xí)以下4個(gè)方面的數(shù)據(jù)獲取: 1、讀取文本文件的數(shù)據(jù),如txt文件和csv文件 2、讀取電子表格文件,如Excel文件 3、讀取統(tǒng)計(jì)軟件生成的數(shù)據(jù)文件,如SAS數(shù)據(jù)集、SPSS數(shù)據(jù)集等 4、讀取數(shù)據(jù)庫數(shù)據(jù),如MySQL數(shù)據(jù)、SQL Server數(shù)據(jù) ? 一、讀取文本文件的數(shù)據(jù) 大家都知道,Python中pandas模塊是專門用來數(shù)據(jù)分析的一個(gè)強(qiáng)大工具,在《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》和《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(二)》中我們詳細(xì)介紹了有關(guān)pandas模塊的應(yīng)用,下面我們就來介紹pandas是如何讀取外部數(shù)據(jù)的。 ? 1、讀取txt數(shù)據(jù) In [1]:?import pandas as pd In [2]:?mydata_txt = pd.read_csv('C:\\test_code.txt',sep = '\t',encoding = 'utf-8')
1)當(dāng)原始文件txt或csv的數(shù)據(jù)不是uft8格式時(shí),需要另存為utf8格式編碼; 2)如果原始的數(shù)據(jù)文件就是uft8格式,為了正常讀入,需要將read_csv函數(shù)的參數(shù)encoding設(shè)置為utf-8 ? 將原始數(shù)據(jù)另存為utf8格式的數(shù)據(jù),重新讀入txt數(shù)據(jù) In [3]:?mydata_txt = pd.read_csv('C:\\test.txt',sep = '\t',encoding = 'utf-8') In [4]:?mydata_txt 很順利,txt文本文件數(shù)據(jù)就這樣進(jìn)入了Python的口袋里了。 ? 2、讀取csv數(shù)據(jù) csv文本文件是非常常用的一種數(shù)據(jù)存儲(chǔ)格式,而且其存儲(chǔ)量要比Excel電子表格大很多,下面我們就來看看如何利用Python讀取csv格式的數(shù)據(jù)文件: In [5]:?mydata_csv = pd.read_csv('C:\\test.csv',sep = ',',encoding = 'utf-8') In [6]:?mydata_csv 如果你善于總結(jié)的話,你會(huì)發(fā)現(xiàn),txt文件和csv文件均可以通過pandas模塊中的read_csv函數(shù)進(jìn)行讀取。該函數(shù)有20多個(gè)參數(shù),類似于R中的read.table函數(shù),如果需要查看具體的參數(shù)詳情,可以查看幫助文檔:help(pandas.read_csv)。 ? 二、讀取電子表格文件 這里所說的電子表格就是Excel表格,可以是xls的電子表格,也可以是xlsx的電子表格。在日常工作中,很多數(shù)據(jù)都是存放在Excel電子表格中的,如果我們需要使用Python對其進(jìn)行分析或處理的話,第一步就是如何讀取Excel數(shù)據(jù)。下面我們來看看如果讀取Excel數(shù)據(jù)集: In [7]:?mydata_excel = pd.read_excel('C:\\test.xlsx',sep = '\t',encoding = 'utf-8') In [8]: mydata_excel ? 三、讀取統(tǒng)計(jì)軟件生成的數(shù)據(jù)文件 往往在集成數(shù)據(jù)源的時(shí)候,可能會(huì)讓你遇到一種苦惱,那就是你的電腦里存放了很多統(tǒng)計(jì)軟件自帶的或生成的數(shù)據(jù)集,諸如R語言數(shù)據(jù)集、SAS數(shù)據(jù)集、SPSS數(shù)據(jù)集等。那么問題來了,如果你電腦里都裝了這些軟件的話,這些數(shù)據(jù)集你自然可以看見,并可以方便的轉(zhuǎn)換為文本文件或電子表格文件,如果你的電腦里沒有安裝SAS或SPSS這樣大型的統(tǒng)計(jì)分析軟件的話,那么你該如何查看這些數(shù)據(jù)集呢?請放心,Python很萬能,它可以讀取很多種統(tǒng)計(jì)軟件的數(shù)據(jù)集,下面我們介紹幾種Python讀取統(tǒng)計(jì)數(shù)據(jù)集的方法: 1、讀取SAS數(shù)據(jù)集 SAS數(shù)據(jù)集的讀取可以使用pandas模塊中的read_sas函數(shù),我們不妨試試該函數(shù)讀取SAS數(shù)據(jù)集。下圖是使用SAS打開的數(shù)據(jù)集,如果你的電腦中沒有安裝SAS,那你也可以通過Python實(shí)現(xiàn)數(shù)據(jù)的讀取。 ? In [1]:?import pandas as pd In [2]:?mydata_sas = pd.read_sas('G:\\class.sas7bdat',encoding='utf8') 2、讀取SPSS數(shù)據(jù)集 讀取SPSS數(shù)據(jù)就稍微復(fù)雜一點(diǎn),自己測試了好多次,查了好多資料,功夫不負(fù)有心人啊,最終還是搞定了。關(guān)于讀取SPSS數(shù)據(jù)文件,需要為您的Python安裝savReaderWriter模塊,該模塊可以到如下鏈接進(jìn)行下載并安裝:https://pypi.python.org/pypi/savReaderWriter/3.4.2。 安裝savReaderWriter模塊 可以通過該命令進(jìn)行savReaderWriter模塊的安裝:python setup.py install 下圖是SPSS數(shù)據(jù)在SPSS中打開的樣子: ? In [1]:?import savReaderWriter In [2]:?mydata_spss = savReaderWriter.SavReader('employee_data.sav') In [3]:?mydata_spss ? 3、實(shí)在沒辦法該怎么辦? ? 四、讀取數(shù)據(jù)庫數(shù)據(jù) 企業(yè)中更多的數(shù)據(jù)還是存放在諸如MySQL、SQL Server、DB2等數(shù)據(jù)庫中,為了能夠使Python連接到數(shù)據(jù)庫中,科學(xué)家專門設(shè)計(jì)了Python DB API的接口。我們?nèi)匀煌ㄟ^例子來說明Python是如何實(shí)現(xiàn)數(shù)據(jù)庫的連接與操作的。 ? 1、Python連接MySQL MySQLdb模塊是一個(gè)連接Python與MySQL的中間橋梁,但目前只能在Python2.x中運(yùn)行,但不意味著Python3就無法連接MySQL數(shù)據(jù)庫。這里向大家介紹一個(gè)非常靈活而強(qiáng)大的模塊,那就是pymysql模塊。我比較喜歡他的原因是,該模塊可以偽裝成MySQLdb模塊,具體看下面的例子: In [1]:?import pymysql In [2]:?pymysql.install_as_MySQLdb() ? ?#偽裝為MySQLdb模塊 In [3]:?import MySQLdb ? 使用Connection函數(shù)聯(lián)通Python與MySQL In [4]:?conn = MySQLdb.Connection( ???...:?? ? ? ?host = 'localhost', ???...:?? ? ? ?user = 'root', ???...:?? ? ? ?password = 'snake', ???...:?? ? ? ?port = 3306, ???...:?? ? ? ?database = 'test', ???...:?? ? ? ?charset='gbk') 使用conn的游標(biāo)方法(cursor),目的是為接下來的數(shù)據(jù)庫操作做鋪墊。 In [5]:?cursor = conn.cursor() In [6]:?sql = 'select * from memberinfo' 執(zhí)行SQL語句 In [7]:?cursor.execute(sql) Out[7]:?4 In [8]:?data = cursor.fetchall() In [9]:?data 我們發(fā)現(xiàn)data中存儲(chǔ)的是元組格式的數(shù)據(jù)集,我們在《Python數(shù)據(jù)分析之pandas學(xué)習(xí)(一)》中講到,構(gòu)造DataFrame數(shù)據(jù)結(jié)構(gòu)只能通過數(shù)組、數(shù)據(jù)框、字典、列表等方式構(gòu)建,但這里是元組格式的數(shù)據(jù),該如何處理呢?很簡單,只需使用list函數(shù)就可以快速的將元組數(shù)據(jù)轉(zhuǎn)換為列表格式的數(shù)據(jù)。 In [10]:?data = list(data) In [11]:?data 下面我們就是要pandas模塊中的DataFrame函數(shù)將上面的data列表轉(zhuǎn)換為Python的數(shù)據(jù)框格式: In [14]:?import pandas as pd In [15]:?mydata = pd.DataFrame(data, columns = ['id','name','age','gender']) In [16]:?mydata 最后千萬千萬注意的是,當(dāng)你的數(shù)據(jù)讀取完之后一定要記得關(guān)閉游標(biāo)和連接,因?yàn)椴魂P(guān)閉會(huì)導(dǎo)致電腦資源的浪費(fèi)。 In [19]:?cursor.close() In [20]:?conn.close() ? 2、Python連接SQL Server 使用Python連接SQL Server數(shù)據(jù)庫,我們這里推薦使用pymssql模塊,該模塊的語法與上面講的pymysql是一致的,這里就不一一講解每一步的含義了,直接上代碼: In [21]:?import pymssql In [22]:?connect = pymssql.connect( ????...:?? ? host = '172.18.1.6\SqlR2', ????...:?? ? user = 'sa', ????...:?? ? password = '1q2w3e4r!!', ????...:?? ? database='Heinz_Ana', ????...:?? ? charset='utf8') ? In [23]:?cursor = connect.cursor() In [24]:?sql = 'select * from HeinzDB2_10' In [25]:?cursor.execute(sql) In [26]:?data = cursor.fetchall() ? In [27]:?data[0] Out[27]:?(67782, '2013-05-01', '二階段', 1.0, 279.0) ? In [28]:?mydata = pd.DataFrame(list(data),columns = ['ConsumerID', ????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'Purdate', ????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'Phase', ????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'ChangeTinRatio', ????...:?? ? ? ? ? ? ? ? ? ? ? ? ?'TOTALAMT']) ? In [29]:?mydata.head() 本期的內(nèi)容就是向大家介紹如何使用Python實(shí)現(xiàn)外部數(shù)據(jù)的讀取,只有完成了這個(gè)基本的第一步,才會(huì)順利的進(jìn)行下面的清洗、處理、分析甚至挖掘部分。這一期的內(nèi)容出來的有點(diǎn)晚,主要還是工作比較繁忙,后期繼續(xù)再接再勵(lì),謝謝大家一直以來的支持和互動(dòng)。在下一期中,我們將介紹R語言中caret包如何實(shí)現(xiàn)特征選擇。 |
轉(zhuǎn)載于:https://www.cnblogs.com/onemorepoint/p/8331678.html
總結(jié)
以上是生活随笔為你收集整理的利用Python读取外部数据文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS之scrollTop不起作用的问题(
- 下一篇: 20170910__换电瓶