pandas入门(6)——数据加载、存储与文件格式

pandas入门(6)——数据加载、存储与文件格式

输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源

一、读取文本格式数据

函数在将文本数据转换为DataFrame时会用到一些技术,这些函数的选项可以划分为:

  1. 索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户获取列名
  2. 类型推断和数据转换:包括用户定义值的转换、和自定义的缺失值标记列表等
  3. 日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列
  4. 迭代:支持对大文件进行逐块迭代
  5. 不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西(比如由成千上万个逗号隔开的数值数据

备注:pandas文档有不同参数的例子,如果你感到阅读某个文件很难,可以通过相似的足够多的例子找到正确的参数

其中一些函数,比如pandas.read_csv,有类型推断功能,因为列数据的类型不属于数据类型。也就是说,你不需要指定列的类型到底是数值、整数、布尔值,还是字符串。其它的数据格式,如HDF5、Feather和msgpack,会在格式中存储数据类型

1、日期和其他自定义类型的处理

若文件以逗号分隔,可以使用read_csv将其读入一个DataFrame:

In [1]: df = pd.read_csv(''D:/python/学习笔记/examples/ex1.csv'')
#或pd.read_table('D:/python/学习笔记/examples/ex1.csv', sep=',')

In [2]: df
Out[2]: 
   a   b   c   d message
0  1   2   3   4   hello
1  5   6   7   8   world
2  9  10  11  12     foo
  1. 并不是所有文件都有标题行,读入这种文件的办法有两个:可以让pandas为其分配默认的列名,也可以自己定义列名,如

    In [3]:pd.read_csv('D:/python/学习笔记/examples/ex2.csv',header=None)
    Out[3]: 
       0   1   2   3      4
    0  1   2   3   4  hello
    1  5   6   7   8  world
    2  9  10  11  12    foo
    
    In [4]: pd.read_csv('D:/python/学习笔记/examples/ex2.csv',names=       ['a','b','c','d','message'])
    Out[4]: 
       a   b   c   d message
    0  1   2   3   4   hello
    1  5   6   7   8   world
    2  9  10  11  12     foo
    
  2. 将message列做成DataFrame的索引,可以明确表示要将该列放到索引4的位置上,也可以通过index_col参数指定"message":

    In [5]: names = ['a', 'b', 'c', 'd', 'message']
    
    In [6]: pd.read_csv('D:/python/学习笔记/examples/ex2.csv', names=names, index_col='message')
    Out[6]: 
             a   b   c   d
    message               
    hello    1   2   3   4
    world    5   6   7   8
    foo      9  10  11  12
    
  3. 将多个列做成一个层次化索引,只需传入由列编号或列名组成的列表即可

    In [7]: parsed=pd.read_csv('D:/python/学习笔记/examples/csv_mindex.csv',index_col=['key1','key2'])
    
    In [8]: parsed
    Out[8]: 
               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
    
  4. 有些表格可能不是用固定的分隔符去分隔字段的(比如空白符或其它模式),虽然可以手动对数据进行规整,这里的字段是被数量不同的空白字符间隔开的。这种情况下,你可以传递一个正则表达式作为read_table的分隔符。可以用正则表达式表达为\s+:

    In [9]: list(open('examples/ex3.txt'))
    Out[9]: 
    ['            A         B         C\n',
     'aaa -0.264438 -1.026059 -0.619500\n',
     'bbb  0.927272  0.302904 -0.032399\n',
     'ccc -0.264273 -0.386314 -0.217601\n',
     'ddd -0.871858 -0.348382  1.100491\n']
     
    In [10]: result=pd.read_table('D:/python/学习笔记/examples/ex3.txt',sep='\s+')
    
    In [11]: result
    Out[11]: 
                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的索引

  5. 解析器函数还有许多参数可以帮助你处理各种各样的异形文件格式。比如说,你可以用skiprows跳过文件的第一行、第三行和第四行:

    In [12]: pd.read_csv('D:/python/学习笔记/examples/ex4.csv', skiprows=[0, 2, 3])
    Out[12]: 
       a   b   c   d message
    0  1   2   3   4   hello
    1  5   6   7   8   world
    2  9  10  11  12     foo
    
  6. 缺失值处理:文件解析任务中的一个重要组成部分。缺失数据经常是要么没有(空字符串),要么用某个标记值表示。默认情况下,pandas会用一组经常出现的标记值进行识别,比如NA及NULL:

    In [13]:result=pd.read_csv('D:/python/学习笔记/examples/ex5.csv')
    
    In [14]: result
    Out[14]: 
      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 [15]: pd.isnull(result)
    Out[15]: 
       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 [16]: result = pd.read_csv('D:/python/学习笔记/examples/ex5', na_values=['NULL'])
    
    In [17]: result
    Out[17]: 
      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
    

    字典的各列可以使用不同的NA标记值:

    In [18]: sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
    
    In [19]: pd.read_csv('D:/python/学习笔记/ex
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值