【python】pandas庫pd.read_csv操作讀取分隔符csv文件和文本text文件參數整理與實例

pandas.read_csv可以讀取CSV(逗號分割)文件、文本類型的文件text、log類型到DataFrame

一、pandas.read_csv常用參數整理

也支持文件的部分導入和選擇迭代,更多幫助參見: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   NaNIn [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。

 

原文:https://blog.csdn.net/brucewong0516/article/details/79092579

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章