dataLoadStorageFileFormatPandas - juedaiyuer/researchNote GitHub Wiki
#数据加载,存储与文件格式#
##读写文本格式的数据##
###pandas的解析函数###
read_csv 从文件,URL,文件型对象中加载带分隔符的数据。默认分隔符为逗号
read_table 从文件,URL,文件型对象中加载带分隔符的数据。默认分隔符为制表符"\t"
read_fwf 读取定宽列格式数据
read_clipboard 读取剪切板中的数据,在将网页转换为表格时很有用
###参数
path 表示文件系统位置,URL,文件型对象的字符串
sep,delimiter 行中各字段进行拆分的字符序列,正则表达式
header 用于列名的行号,默认为0-第一行,没有header行设置None
index_col 用于行索引的列编号或列名
names 用于结果的列名列表
skiprows 需要忽略的行数
na_values 一组用于替换NA的值
comment 将注释信息从行尾拆分出去的字符
parse_dates 数据解析为日期,默认False
keep_date_col 如果连接多列解析日期,则保持参与连接的列,默认False
converters 由列号/列名根函数之间的映射关系组成的字典,{'foo':f},foo列的所有值应用函数f
dayfirst 当解析有歧义的日期时,将其看做国际格式,默认False
date_parser 用于解析日期的函数
nrows 需要读取的行数
iterator 返回一个TextParser以便逐块读取文件
chunksize 文件块的大小
skip_footer 需要忽略的行数
verbose 打印各种解析器输出信息
encoding 用于unicode的文本编码格式
squeeze 如果数据经解析后仅含一列,则返回Series
thousands 千分位分隔符
###测试###
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
>>> df=pd.read_csv('test/test.csv')
>>> df
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
read_table,需要指定分隔符
>>> pd.read_table('test/test.csv',sep=',')
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
没有标题行的文件
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
pandas为其分配默认的列名
>>> df=pd.read_csv('test/test2.csv',header=None)
>>> df
0 1 2 3 4
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
自定义列名
>>> df=pd.read_csv('test/test2.csv',names=['a','b','c','d','message'])
>>> df
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
将message列做成DataFrame的索引,index_col参数指定message
>>> names=['a','b','c','d','message']
>>> pd.read_csv('test/test2.csv',names=names,index_col='message')
a b c d
message
hello 1 2 3 4
world 5 6 7 8
foo 9 10 11 12
如果将多个列做成一个层次化索引,只需要传入由列编号或列名组成的列表
key1,key2,value1,value2
one,a,1,2
one,b,3,4
one,c,5,6
one,d,7,8
two,a,9,10
two,b,11,12
two,c,13,14
two,d,15,16
>>> parsed=pd.read_csv('test/test3.csv',index_col=['key1','key2'])
>>> parsed
value1 value2
key1 key2
one a 1 2
b 3 4
c 5 6
d 7 8
two a 9 10
b 11 12
c 13 14
d 15 16
不是用固定的分隔符去分割字段,编写一个正则表达式来作为read_table的分隔符
A B C
aaa -0.0715834 -0.57494471 0.72855709
bbb -0.96507724 1.16917368 0.85375937
ccc -0.89285266 -0.31767333 0.19935386
ddd 0.75722349 -1.0138757 -1.63183457
>>> list(open('test/test4.txt'))
[' A B C\n', 'aaa -0.0715834 -0.57494471 0.72855709\n', 'bbb -0.96507724 1.16917368 0.85375937\n', 'ccc -0.89285266 -0.31767333 0.19935386\n', 'ddd 0.75722349 -1.0138757 -1.63183457\n', '\n']
>>> result=pd.read_table('test/test4.txt',sep='\s+')
>>> result
A B C
aaa -0.071583 -0.574945 0.728557
bbb -0.965077 1.169174 0.853759
ccc -0.892853 -0.317673 0.199354
ddd 0.757223 -1.013876 -1.631835
解析器函数有许多参数可以帮助你处理各种各样的异形文件格式
skiprows设置跳过文件行数,pd.read_csv('test/test.csv',skiprows=[0,2,3])
####缺失值处理
标记:NA,-1,#IND,NULL
na_values可以接受一组用于表示缺失值的字符串,pd.read_csv('test/test.csv',na_values=['world'])
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,7,8,world
three,9,10,11,12,foo
一个字典为各列指定不同的NA标记值
>>> sentinels={'message':['foo','NA'],'something':['two']}
>>> pd.read_csv('test/test5.csv',na_values=sentinels)
something a b c d message
0 one 1 2 3 4 NaN
1 NaN 5 6 7 8 world
2 three 9 10 11 12 NaN
##逐块读取文本文件##
Page:179
##将数据写出到文本格式##
数据也可以输出为分隔符格式的文本
>>> data=pd.read_csv('test/test5.csv')
>>> data
something a b c d message
0 one 1 2 3 4 NaN
1 two 5 6 7 8 world
2 three 9 10 11 12 foo
利用DataFrame的to_csv方法,可以将数据写到一个以逗号分割的文件中
>>> data.to_csv('test/out.csv')
直接写出到sys.stdout,仅仅是打印结果
>>> data.to_csv(sys.stdout,sep='|')
缺失值在输出结果中会被表示为空字符串,别的标记值
>>> data=pd.read_csv('test/out.csv',na_rep='NULL')
如果没有设置其它选项,则会写出行和列的标签,当然,它们也都可以被禁用
>>> data=pd.read_csv('test/out.csv',index=False,header=False)
只写出一部分的列,并以你指定的顺序排列
>>> data=pd.read_csv('test/out.csv',index=False,cols=['a','b','c'])
Series的to_csv方法
##手工处理分隔符格式
大部分存储在磁盘上的表格型数据都能用pandas.read_table进行加载
简单的CSV文件
"a","b","c"
"1","2","3"
"1","2","3","4"
对于任何单字符分隔符文件,可以直接使用Python内置的csv模块,将任意已打开的文件或文件型对象传给csv.reader
>>> import csv
>>> f=open('test/test6.csv')
>>> reader=csv.reader(f)
>>> for line in reader:
... print line
...
['a', 'b', 'c']
['1', '2', '3']
['1', '2', '3', '4']