python讀取數據文件:pandas包詳解


本文轉載自https://blog.csdn.net/brucewong0516/article/details/79092579

pandas包是一個高效的文件讀取工具,適用於txt,excel,等數據格式的文件,具有很強的自動識別功能。

pandas.read_csv可以讀取CSV(逗號分割)文件、文本類型的文件text、log類型到DataFrame,下面是pandas.read_csv常用參數整理

pandas也支持文件的部分導入和選擇迭代,更多幫助參見:http://pandas.pydata.org/pandas-docs/stable/io.html

 

參數filepath_or_buffer :

可以是URL,可用URL類型包括:http, ftp, s3和文件。對於多文件正在准備中本地文件讀取。 
實例1:實現圖片中文件的讀取,注意圖片中的所有輸入基於英文輸入下得到,返回DataFrame文件 
這里寫圖片描述

In [1]: import pandas as pd #讀取out.log文件,其他的參數默認 In [2]: out = pd.read_csv('out.log') In [3]: out Out[3]: book kook 0 joke2 dddd 1 fang3 NaN 2 test1 NaN 3 test2 NaN 4 test3 NaN 5 1997/10/2 NaN

 

實例2:讀取股票數據csv文件,返回DataFrame文件

In [4]: stock = pd.read_csv('000777.csv') In [5]: stock Out[5]: date code closing high low opening pre_closing zde \ 0 2017/1/20 '000777 21.17 21.29 20.90 20.90 20.86 0.31 1 2017/1/19 '000777 20.86 21.14 20.82 21.12 21.12 -0.26 2 2017/1/18 '000777 21.12 21.44 21.09 21.40 21.37 -0.25 3 2017/1/17 '000777 21.37 21.49 20.75 21.17 21.15 0.22 4 2017/1/16 '000777 21.15 22.50 20.28 22.50 22.53 -1.38 5 2017/1/13 '000777 22.53 22.88 22.43 22.71 22.85 -0.32 6 2017/1/12 '000777 22.85 23.53 22.75 23.41 23.51 -0.66

 

參數sep

如果不指定參數,則會嘗試使用逗號分隔。分隔符長於一個字符並且不是‘\s+’,將使用python的語法分析器。並且忽略數據中的逗號。正則表達式例子:’\r\t’。

In [6]: a = pd.read_csv('out.log',sep = '\s') C:/Anaconda3/Scripts/ipython-script.py:1: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'. if __name__ == '__main__': #設定空值作為分隔符,','不會分割每一行的數據 In [7]: a Out[7]: book,kook 0 joke2,dddd 1 fang3 2 test1 3 test2 4 test3 5 1997/10/2 #空值的設定兩種方式:' ' or '\s' In [9]: a = pd.read_csv('out.log',sep = ' ') In [10]: a Out[10]: book,kook 0 joke2,dddd 1 fang3 2 test1 3 test2 4 test3 5 1997/10/2

 

參數delimiter :

定界符,備選分隔符(如果指定該參數,則sep參數失效)

In [13]: a = pd.read_csv('out.log',sep = ', ',delimiter='o') #此時sep = ','設定失效 In [14]: a Out[14]: b Unnamed: 1 k,k Unnamed: 3 k 0 j ke2,dddd NaN NaN NaN 1 fang3 NaN NaN NaN NaN 2 test1 NaN NaN NaN NaN 3 test2 NaN NaN NaN NaN 4 test3 NaN NaN NaN NaN 5 1997/10/2 NaN NaN NaN NaN

 

參數delim_whitespace : 

指定空格(例如’ ‘或者’ ‘)是否作為分隔符使用,等效於設定sep=’\s+’。如果這個參數設定為True那么delimiter 參數失效。

In [20]: a = pd.read_csv('out.log',delim_whitespace = True) In [21]: a Out[21]: book,kook 0 joke2,dddd 1 fang3 2 test1 3 test2 4 test3 5 1997/10/2

 

參數header :

指定行數用來作為列名,數據開始行數。如果文件中沒有列名,則默認為0【第一行數據】,否則設置為None。如果明確設定 header = 0 就會替換掉原來存在列名。header參數可以是一個list例如:[0,1,3],這個list表示將文件中的這些行作為列標題(意味着每一列有多個標題),介於中間的行將被忽略掉。注意:如果skip_blank_lines=True 那么header參數忽略注釋行和空行,所以header=0表示第一行數據而不是文件的第一行。

In [22]: a = pd.read_csv('out.log',delim_whitespace = True,header = None) In [23]: a Out[23]: 0 0 book,kook 1 joke2,dddd 2 fang3 3 test1 4 test2 5 test3 6 1997/10/2

 

參數names :

用於結果的列名列表,如果數據文件中沒有列標題行,就需要執行 header=None。names屬性在header之前運行默認列表中不能出現重復,除非設定參數mangle_dupe_cols=True。

In [32]: a = pd.read_csv('out.log',names='ko') In [33]: a Out[33]: k o 0 book kook 1 joke2 dddd 2 fang3 NaN 3 test1 NaN 4 test2 NaN 5 test3 NaN 6 1997/10/2 NaN

 

參數index_col :

用作行索引的列編號或者列名,如果給定一個序列則有多個行索引。

In [45]: a = pd.read_csv('out.log',header=None,prefix='XX',index_col=0) #指定第一列作為行索引 In [46]: a Out[46]: XX1 XX0 book kook joke2 dddd fang3 NaN test1 NaN test2 NaN test3 NaN 1997/10/2 NaN In [47]: a = pd.read_csv('out.log',header=None,prefix='XX',index_col=1) #指定第二列作為行索引 In [48]: a Out[48]: XX0 XX1 kook book dddd joke2 NaN fang3 NaN test1 NaN test2 NaN test3 NaN 1997/10/2

 

參數usecols:

返回一個數據子集,該列表中的值必須可以對應到文件中的位置(數字可以對應到指定的列)或者是字符傳為文件中的列名。例如:usecols有效參數可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用這個參數可以加快加載速度並降低內存消耗。

 

參數prefix:

在沒有列標題時,也就是header設定為None,給列添加前綴。例如:添加prefix= ‘X’ 使得列名稱成為 X0, X1, …

In [38]: a = pd.read_csv('out.log',header=None,prefix='XX') In [39]: a Out[39]: XX0 XX1 0 book kook 1 joke2 dddd 2 fang3 NaN 3 test1 NaN 4 test2 NaN 5 test3 NaN 6 1997/10/2 NaN

 

參數dtype:

每列數據的數據類型。例如 {‘a’: np.float64, ‘b’: np.int32}

In [49]: a = pd.read_csv('out.log',header=None,prefix='XX',index_col=1,dtype={'XX0':str}) In [50]: a Out[50]: XX0 XX1 kook book dddd joke2 NaN fang3 NaN test1 NaN test2 NaN test3 NaN 1997/10/2 In [51]: a['XX0'].values Out[51]: array(['book', 'joke2', 'fang3', 'test1', 'test2', 'test3', '1997/10/2'], dtype=object) In [52]: a['XX0'].values[0] Out[52]: 'book' In [53]: type(a['XX0'].values[0]) Out[53]: str

 

 

參數skipinitialspace:

忽略分隔符后的空白(默認為False,即不忽略).

 

參數skiprows :

需要忽略的行數(從文件開始處算起),或需要跳過的行號列表(從0開始)。

In [54]: a = pd.read_csv('out.log',header=None,prefix='XX',index_col=1,skiprows= 1) #略去第二行的數據 In [55]: a Out[55]: XX0 XX1 dddd joke2 NaN fang3 NaN test1 NaN test2 NaN test3 NaN 1997/10/2

 

參數nrows :

需要讀取的行數(從文件頭開始算起)。

In [56]: a = pd.read_csv('out.log',header=None,prefix='XX',index_col=1,skiprows= 1,nrows=4) In [57]: a Out[57]: XX0 XX1 dddd joke2 NaN fang3 NaN test1 NaN test2

 

參數na_values :

一組用於替換NA/NaN的值。如果傳參,需要制定特定列的空值。默認為‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.

 

參數keep_default_na:

如果指定na_values參數,並且keep_default_na=False,那么默認的NaN將被覆蓋,否則添加

 

參數na_filter:

是否檢查丟失值(空字符串或者是空值)。對於大文件來說數據集中沒有空值,設定na_filter=False可以提升讀取速度。

 

參數skip_blank_lines :

如果為True,則跳過空行;否則記為NaN。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM