美文网首页
笔记|数据分析之pandas基础----数据文件加载与存储(二)

笔记|数据分析之pandas基础----数据文件加载与存储(二)

作者: loannes | 来源:发表于2019-04-30 18:30 被阅读0次
    pandas-read-file

    读取Microsoft Excel文件

    Excel作为最典型的表格型数据,我们需要用到ExcelFile对象,首先需要下载安装xlrdopenpyxl

    In [11]: xls_file = pd.ExcelFile('ex1.xlsx')
    
    In [12]: table = xls_file.parse('Sheet1')
    
    In [13]: table
    Out[13]:
       Unnamed: 0  a   b   c   d message
    0           0  1   2   3   4   hello
    1           1  5   6   7   8   world
    2           2  9  10  11  12     foo
    

    用requests与Web API做交互

    Python中最常用也是最方便的访问API的库requests
    requests官方文档

     In [19]: url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    
    In [20]: resp = requests.get(url)
    
    In [21]: resp
    Out[21]: <Response [200]>
    
    In [30]: data = resp.json()
    
    In [32]: frame = DataFrame(data)
    
    In [33]: frame
    Out[33]:
        total_count  incomplete_results                                              items
    0       3747517               False  {'id': 21289110, 'node_id': 'MDEwOlJlcG9zaXRvc...
    1       3747517               False  {'id': 83222441, 'node_id': 'MDEwOlJlcG9zaXRvc...
    2       3747517               False  {'id': 54346799, 'node_id': 'MDEwOlJlcG9zaXRvc...
    3       3747517               False  {'id': 51117837, 'node_id': 'MDEwOlJlcG9zaXRvc...
    4       3747517               False  {'id': 1039520, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    5       3747517               False  {'id': 596892, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
    6       3747517               False  {'id': 33614304, 'node_id': 'MDEwOlJlcG9zaXRvc...
    7       3747517               False  {'id': 4164482, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    8       3747517               False  {'id': 3544424, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    9       3747517               False  {'id': 33015583, 'node_id': 'MDEwOlJlcG9zaXRvc...
    10      3747517               False  {'id': 21872392, 'node_id': 'MDEwOlJlcG9zaXRvc...
    11      3747517               False  {'id': 1362490, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    12      3747517               False  {'id': 3638964, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    13      3747517               False  {'id': 843222, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
    14      3747517               False  {'id': 529502, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
    15      3747517               False  {'id': 63476337, 'node_id': 'MDEwOlJlcG9zaXRvc...
    16      3747517               False  {'id': 40416236, 'node_id': 'MDEwOlJlcG9zaXRvc...
    17      3747517               False  {'id': 4086616, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    18      3747517               False  {'id': 29290473, 'node_id': 'MDEwOlJlcG9zaXRvc...
    19      3747517               False  {'id': 26516210, 'node_id': 'MDEwOlJlcG9zaXRvc...
    20      3747517               False  {'id': 5483330, 'node_id': 'MDEwOlJlcG9zaXRvcn...
    21      3747517               False  {'id': 81598961, 'node_id': 'MDEwOlJlcG9zaXRvc...
    22      3747517               False  {'id': 83844720, 'node_id': 'MDEwOlJlcG9zaXRvc...
    23      3747517               False  {'id': 12888993, 'node_id': 'MDEwOlJlcG9zaXRvc...
    24      3747517               False  {'id': 136328388, 'node_id': 'MDEwOlJlcG9zaXRv...
    25      3747517               False  {'id': 70905478, 'node_id': 'MDEwOlJlcG9zaXRvc...
    26      3747517               False  {'id': 139824423, 'node_id': 'MDEwOlJlcG9zaXRv...
    27      3747517               False  {'id': 41058054, 'node_id': 'MDEwOlJlcG9zaXRvc...
    28      3747517               False  {'id': 15019962, 'node_id': 'MDEwOlJlcG9zaXRvc...
    29      3747517               False  {'id': 873328, 'node_id': 'MDEwOlJlcG9zaXRvcnk...
    

    使用数据库

    在存储大量数据的情况中,使用SQL数据库无疑是个最佳的选择。
    通过sqlite3创建一个数据库

    In [34]: import sqlite3
    
    In [35]: query = """
        ...: CREATE TABLE test
        ...: (a VARCHAR(20), b VARCHAR(20),
        ...: c REAL, d INTERGER);"""
    
    In [36]: con = sqlite3.connect('testdata.sqlite')
    
    In [37]: con.execute(query)
    Out[37]: <sqlite3.Cursor at 0x12042d490>
    
    In [38]: con.commit()
    

    然后插入几行数据

    In [40]: data = [('Atlanta', 'Georgia', 1.25, 6),('Tallahassee','Florida',2.6, 3),('Sacramento','Cali
        ...: fornia',1.7, 5)]
    
    In [41]: stmt = "INSERT INTO test VALUES(?,?,?,?)"
    
    In [42]: con.executemany(stmt, data)
    Out[42]: <sqlite3.Cursor at 0x12042d960>
    
    In [43]: con.commit()
    

    接下来从数据库中选取数据,大部分Python SQL驱动器都会返回一个元组列表:

    In [44]: cursor = con.execute('select *from test')
    
    In [45]: rows = cursor.fetchall()
    
    In [46]: rows
    Out[46]:
    [('Atlanta', 'Georgia', 1.25, 6),
     ('Tallahassee', 'Florida', 2.6, 3),
     ('Sacramento', 'California', 1.7, 5)]
    

    将这个元组传给DataFrame,还需要列名(在description属性中)

    In [47]: cursor.description
    Out[47]:
    (('a', None, None, None, None, None, None),
     ('b', None, None, None, None, None, None),
     ('c', None, None, None, None, None, None),
     ('d', None, None, None, None, None, None))
    
    In [53]: frame = DataFrame(rows, columns=[x[0] for x in cursor.description])
    
    In [54]: frame
    Out[54]:
                 a           b     c  d
    0      Atlanta     Georgia  1.25  6
    1  Tallahassee     Florida  2.60  3
    2   Sacramento  California  1.70  5
    

    **操作步骤略显繁琐,其实SQLALchemy项目可以解决这个问题(安装之)。pandas中的read_sql函数可以结合它一起使用。

    In [61]: db = sqla.create_engine('sqlite:///testdata.sqlite')
    
    In [62]: pd.read_sql('select * from test',db)
    Out[62]:
                a            b      c  d
    0      Atlanta      Gerogia  1.25  6
    1  Tallahassee      Florida  2.60  3
    2   Sacramento   California  1.70  5
    

    总结:

    本章中学习了如何加载与存储常用的文件格式,在Python中不同的文件格式需要用到不同的包,有些需要配合Python自带的函数一起使用。

    处理Html文件 需要pandas结合beautifulsoup可很方便的读取html文件并转换成DataFrame格式
    处理XML文件 需要用到lxml库中的objectify对象,通过objectify.parse函数直接解析,解析后可直接获取xml的根节点root
    利用StringIO也可以解析字符串形式的html
    处理Excel文件 配合xlrdopenpyxl包,ExcelFile对象也可以直接解析Excel文件并转成DataFrame
    与WebAPI交互 requests包完美解决了Python与WebAPI交互的问题,使用方便效率高。
    使用数据库 Python的sqlite3包含了数据库操作的基本功能,缺点是操作繁琐。而比较流行的项目SQLALchemy则非常适合作为Python的数据库操作工具。

    相关文章

      网友评论

          本文标题:笔记|数据分析之pandas基础----数据文件加载与存储(二)

          本文链接:https://www.haomeiwen.com/subject/fqzmnqtx.html