zoukankan      html  css  js  c++  java
  • 利用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
                  
    申明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/lsyb-python/p/11967703.html
Copyright © 2011-2022 走看看