• pandas HDF5与EXCEL文件


    一、HDF5

    HDF5是一个备受好评的文件格式,广泛用于存储大量的科学计算数组。很多数据分析的实际工作中困难都在于I/O密集,而不是CPU密集,使用HDF5这样的工具可以大大加速你的应用。它以C库的形式提供,并且具有许多其它语言的接口,包括Java、MATLAB和Python。HDF5中的HDF代表分层数据格式。每个HDF5文件可以存储多个数据集并且支持元数据。支持多种压缩模式的即时压缩,使得重复模式的数据可以更高效地存储。HDF5适用于处理不适合在内存中存储地超大型数据,可以使你高效读写大型数据的一小块。

    要注意的是HDF5并不是数据库,它是一种适合一次写入多次读取的数据集。尽管数据可以在任何时间添加到文件中,但如果多个写入者持续写入,文件可能会损坏。

    在外部,可以通过使用PyTables或h5py等库直接访问HDF5文件,但Pandas提供了一个高阶的接口,可以简化存储过程。

    Pandas使用HDFStore类来实现这一功能,类似字典一样的工作方式:

    In [90]: df = pd.DataFrame({'a':np.random.randn(100)})  # 有100行
    In [91]: df.head() # 看看前5行
    Out[91]:
              a
    0 -0.917062
    1  0.797327
    2  0.659787
    3 -0.779638
    4  0.550464
    In [92]: store = pd.HDFStore('mydata.h5') # 生成HDF5文件
    In [93]: store['obj1'] = df  # 以类似字典的方式,向文件里写入内容
    In [94]: store['obj1_col'] = df['a'] # 再写一点
    In [95]: store   # 看看信息,在当前工作目录下,你可以找到这个文件
    Out[95]:
    <class 'pandas.io.pytables.HDFStore'>
    File path: mydata.h5

    既然是类似字典的工作方式,那当然也可以像字典那样索引数据:

    In [97]: store['obj1']
    Out[97]:
               a
    0  -0.917062
    1   0.797327
    2   0.659787
    3  -0.779638
    4   0.550464
    ..       ...
    95 -2.042226
    96  1.286631
    97  0.487709
    98 -0.202580
    99  1.619085
    
    [100 rows x 1 columns]

    HDFStore支持两种工作模式,‘fixed’和‘table’。table的速度更慢,但支持一种类似数据库SQL语言的查询操作:

    In [98]: store.put('obj2',df,format='table') # put是赋值的显式版本,允许我们设置其它选项
    In [99]: store.select('obj2', where=['index >=10 and index <= 15'])  # 类似SQl语言的查询操作,要注意空格的位置
    Out[99]:
               a
    10 -1.430696
    11 -0.616732
    12 -0.643991
    13 -0.004270
    14  0.797136
    15 -0.175095
    In [100]: store.close() # 关闭文件

    除此之外,Padas还提供了以上操作的快捷方式:

    In [101]: df.to_hdf('mydata.h5','obj3', format='table')
    In [102]: pd.read_hdf('mydata.h5', 'obj3' ,where=['index < 5'])
    Out[102]:
              a
    0 -0.917062
    1  0.797327
    2  0.659787
    3 -0.779638
    4  0.550464

    二、Excel文件

    Pandas支持Excle 2003或更高版本文件的读写。在内部,这需要使用附加包xlrd和openpyxl来分别读取XLS和XLSX文件。如果你的环境中没有这两个包,可能需要使用pip或者conda手动安装一下。

    使用很简单,看下面的例子:

    In [104]: xlsx = pd.ExcelFile('d:/ex1.xlsx') # 打开excel文件
    In [105]: pd.read_excel(xlsx, 'Sheet1') # 读取指定的表
    Out[105]:
       a   b   c   d message
    0  1   2   3   4   hello
    1  5   6   7   8   world
    2  9  10  11  12     foo

    或者使用更简洁的语法:

    In [106]: df = pd.read_excel('d:/ex1.xlsx', 'Sheet1')
    In [107]: df
    Out[107]:
       a   b   c   d message
    0  1   2   3   4   hello
    1  5   6   7   8   world
    2  9  10  11  12     foo

    将pandas数据写回到excel文件中时,你必须先生成一个ExcelWriter,然后使用to_excel方法将数据写入:

    In [108]: writer = pd.ExcelWriter('d:/ex2.xlsx') # 生成文件
    In [109]: df.to_excel(writer, 'Sheet1') # 写入
    In [110]: writer.save()  #关闭文件

    当然,也可以使用快捷操作:

    In [112]: df.to_excel('d:/ex3.xlsx')
  • 相关阅读:
    JS-Array数组对象
    JS-Math对象
    JS-Date对象
    JS-流程控制汇集
    css笔记
    CSS3-box盒布局
    css笔记
    CSS3中的animation动画
    JS-百钱买百鸡案例-for循环制作
    JS-用js的for循环实现九九乘法表以及其他算数题等
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12710460.html
Copyright © 2020-2023  润新知