• 利用Python进行数据分析-Pandas(第三部分)


      访问数据是使用本书所介绍的这些工具的第一步。这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具。

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

     1、读写文本格式的数据

      pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。如下表对它们进行了总结,其中read_csv和read_table可能会是今后用的最多的:

    函数 说明
    read_csv   从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符号为逗号
    read_table 从文件、URL、文件型对象中加载带分隔符的数据。默认分隔符为制表符(' ')
    read_fwf 读取定宽列格式数据(也就是说,没有分隔符)
    read_clipboard 读取剪贴板中的数据,可以看做read_table的剪贴板。再将网页转换为表格时很有用
    read_excel 从Excel XLS或XLSX file读取表格数据
    read_hdf 读取pandas写的HDF5文件
    read_html 读取HTML文档中的所有表格
    read_json 读取JSON字符串中的数据
    read_msgpack 二进制格式编码的pandas数据
    read_pickle 读取Python pickle格式中储存的任意对象
    read_sas 读取存储于SAS系统自定义存储格式的SAS数据集
    read_sql 读取SQL查询结果为pandas的DataFrame
    read_stata 读取Stata文件格式的数据集
    read_feather 读取Feather二进制文件格式

      大致介绍下这些函数在将文本数据转换为DataFrame时所用到的一些技术。这些函数的选项可以划分为以下几个大类:

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

       因为工作中实际碰到的数据可能十分混乱,一些数据加载函数(尤其是read_csv)的选项逐渐变得复杂起来。面对不同的参数,感到头痛很正常(read_csv有超过50个参数)。pandas文档有这些参数的栗子,如果感到阅读某个文件很难,可以通过相似的足够多的栗子找到正确的参数。

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

      日期和其他自定义类型的处理需要多花点功夫才行。首先我们来看一个以逗号分隔的文本文件:

       在练习之前我在自己环境下创建了exl.csv文件,该文件与程序是在同一目录下:

    import pandas as pd
    df = pd.read_csv('exl.csv')
    print(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方法来读该文本文件,不过在读取的时候,需要输入参数sep,该参数是指定分隔符:

    print(pd.read_table('exl.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
    

    并不是所有文件都有标题行。读入该文件的办法有两个。你可以让pandas为其分配默认的列名,也可以自己定义列名:

    如下为分配的默认列名:

    print(pd.read_csv('ex2.csv', header=None))
       0   1   2   3      4
    0  1   2   3   4  hello
    1  5   6   7   8  world
    2  9  10  11  12    foo
    

    如下为自定义列名:

    print(pd.read_csv('ex2.csv', names=['a', 'b', 'c', 'd', 'message']))
       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']
    print(pd.read_csv('ex2.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
                  
    申明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Less学习笔记
    如何在网页启动Windows服务
    让VS2010记住TFS的登陆用户名和密码
    调式WP程序报0x80131500错误的解决办法
    FizzBuzzWhizz是算法题吗?我从设计的角度去解决的。
    基于Roslyn的远程任务平台
    优雅就一个字——设计模式之数据上传接口
    关于反射优化的疑问,单次调用时直接反射要快于委托调用反射?
    用VC++11中编译libthrift项目
    grunt初体验
  • 原文地址:https://www.cnblogs.com/lsyb-python/p/11967703.html
Copyright © 2020-2023  润新知