csv格式转trc_《利⽤Python进⾏数据分析》六章·数据加载、
存储与⽂件格式·学习笔。。。
⼀、数据加载、存储与⽂件格式
访问数据是使⽤⼯具的第⼀步,着重介绍pandas的数据输⼊与输出。
输⼊输出通常可以划分为⼏个⼤类:读取⽂本⽂件和其他更⾼效的磁盘存储格式,加载数据库中的数据,利⽤Web API操作⽹络资源。⼆、实例
2.1 读写⽂本格式的数据
pandas提供了⼀些⽤于将表格型数据读取为DataFrame对象的函数。
·read_ csv
从⽂件、URL、⽂件型对象中加载带分隔符的数据。默认分隔符为逗号
·read_ table
从⽂件、URL、⽂件型对象中加载带分隔符的数据。默认分隔符为制表符(t)
接着介绍⼀下这些函数在将⽂本数据转换为DataFrame时所⽤到的⼀些技术。这些函数的选项可以划分为以下⼏个⼤类:
· 索引:将⼀个或多个列当做返回的DataFrame处理,以及是否从⽂件、⽤户获取列名。
· 类型推断和数据转换:包括⽤户定义值的转换、和⾃定义的缺失值标记列表等。
· ⽇期解析:包括组合功能,⽐如将分散在多个列中的⽇期时间信息组合成结果中的单个列。
· 迭代:⽀持对⼤⽂件进⾏逐块迭代。
· 不规整数据问题:跳过⼀些⾏、页脚、注释或其他⼀些不重要的东西(⽐如由成千上万个逗号隔开的数值数据)。
其中⼀些函数,⽐如ad_csv,有类型推断功能,因为列数据的类型不属于数据类型。也就是说,你不需要指定列的类型到底是数值、整数、布尔值,还是字符串。其它的数据格式,如HDF5、Feather和msgpack,会在格式中存储数据类型。
type examplesex1.csv#windowsx系统下cmd,记得斜杠是向右下
a,b,c,d,message1,2,3,4,hello5,6,7,8,world9,10,11,12,foo
由于该⽂件以逗号分隔,所以我们可以使⽤read_csv将其读⼊⼀个DataFrame:
In [9]: df = pd.read_csv('examples/ex1.csv')
In [10]: df
Out[10]:
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,并指定分隔符:
In [11]: pd.read_table('examples/ex1.csv', sep=',')
Out[11]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
并不是所有⽂件都有标题⾏。看看下⾯这个⽂件:
type examplesex2.csv
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
读⼊该⽂件的办法有两个。你可以让pandas为其分配默认的列名,也可以⾃⼰定义列名:
In [13]: pd.read_csv('examples/ex2.csv', header=None)
Out[13]:
0 1 2 3 4
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
In [14]: pd.read_csv('examples/ex2.csv', names=['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的索引。你可以明确表⽰要将该列放到索引4的位置上,也可以通过index_col参数指定"message":
In [15]: names = ['a', 'b', 'c', 'd', 'message']
In [16]: pd.read_csv('examples/ex2.csv', names=names, index_col='message')
Out[16]:
a b c d
message
hello 1 2 3 4
world 5 6 7 8
foo 9 10 11 12
如果希望将多个列做成⼀个层次化索引,只需传⼊由列编号或列名组成的列表即可:
rows函数的使用方法及实例CMD: type examplescsv_mindex.csv
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
In [18]: parsed = pd.read_csv('examples/csv_mindex.csv',
....: index_col=['key1', 'key2'])#层次化索引
In [19]: parsed
Out[19]:
value1 value2
key1 key2
one a 1 2
b 3 4
two a 9 10
b 11 12
c 13 14
d 15 16
有些情况下,有些表格可能不是⽤固定的分隔符去分隔字段的(⽐如空⽩符或其它模式)。看看下⾯这个⽂本⽂件:
In [20]: list(open(''))
Out[20]:
[' A B Cn',
'aaa -0.264438 -1.026059 -0.619500n',
'bbb 0.927272 0.302904 -0.032399n',
'ccc -0.264273 -0.386314 -0.217601n',
'ddd -0.871858 -0.348382 1.100491n']
虽然可以⼿动对数据进⾏规整,这⾥的字段是被数量不同的空⽩字符间隔开的。这种情况下,你可以传递⼀个正则表达式作为read_table的分隔符。可以⽤正则表达式表达为s+,于是有:
In [21]: result = pd.read_table('', sep='s+')#s匹配任何空⽩字符,+表⽰⾄少⼀个字符
In [22]: result
Out[22]:
A B C
aaa -0.264438 -1.026059 -0.619500
bbb 0.927272 0.302904 -0.032399
ccc -0.264273 -0.386314 -0.217601
ddd -0.871858 -0.348382 1.100491
这⾥,由于列名⽐数据⾏的数量少,所以read_table推断第⼀列应该是DataFrame的索引。
这些解析器函数还有许多参数可以帮助你处理各种各样的异形⽂件格式。例如可以⽤skiprows跳过⽂件的第⼀⾏、第三⾏和第四⾏:
CMD:type examplesex4.csv
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
缺失值处理是⽂件解析任务中的⼀个重要组成部分。缺失数据经常是要么没有(空字符串),要么⽤某个标记值表⽰。默认情况下,pandas会⽤⼀组经常出现的标记值进⾏识别,⽐如NA及NULL:
CMD:type examplesex5.csv
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,,8,world
three,9,10,11,12,foo
In [26]: result = pd.read_csv('examples/ex5.csv')
In [27]: result
Out[27]:
something a b c d message
0 one 1 2 3.0 4 NaN
1 two 5 6 NaN 8 world
2 three 9 10 11.0 12 foo
In [28]: pd.isnull(result)
Out[28]:
something a b c d message
0 False False False False False True
1 False False False True False False
2 False False False False False False
na_values可以⽤⼀个列表或集合的字符串表⽰缺失值:
In [29]: result = pd.read_csv('examples/ex5.csv', na_values=['NULL'])
In [30]: result
Out[30]:
something a b c d message
0 one 1 2 3.0 4 NaN
1 two 5 6 NaN 8 world
2 three 9 10 11.0 12 foo
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论