python读取数据⽂件:pandas包详解
本⽂转载⾃
pandas包是⼀个⾼效的⽂件读取⼯具,适⽤于txt,excel,等数据格式的⽂件,具有很强的⾃动识别功能。
pandas也⽀持⽂件的部分导⼊和选择迭代,更多帮助参见:
参数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.8
2    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.1
5  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  '00077
7    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 warni  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)
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  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      joke
2  dddd
2      fang
3  NaN
3      test1  NaN
4      test2  NaN
5      test3  NaN
6  1997/10/2  NaN
参数index_col :python 正则表达式 空格
⽤作⾏索引的列编号或者列名,如果给定⼀个序列则有多个⾏索引。
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      joke
2  dddd
2      fang
3  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})
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。