美文网首页
[python][科学计算][pandas]简要使用教程8-读写

[python][科学计算][pandas]简要使用教程8-读写

作者: jiedawang | 来源:发表于2019-03-18 13:20 被阅读0次

    最后一次更新日期: 2019/3/17

    pandas是基于numpy的数据分析库,提供一些更易用的数据模型和大量高效的统计方法。

    使用前先导入模块:
    import pandas as pd
    按需导入以下模块:
    import numpy as np
    import matplotlib.pyplot as plt

    1. 读写csv

    In [13]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])
    
    In [14]: df.to_csv()
    Out[14]: ',a,b\nr1,1,3\nr2,2,4\n'
    
    In [15]: df.to_csv(index=False)
    Out[15]: 'a,b\n1,3\n2,4\n'
    
    In [16]: df.to_csv("d:\\test.csv",index=False)
    
    In [17]: df2=pd.read_csv("d:\\test.csv")
    
    In [18]: df2
    Out[18]: 
       a  b
    0  1  3
    1  2  4
    

    to_csv方法用于写入csv文件:
    参数path_or_buf设置文件路径或对象,默认为None,表示直接返回完整的内容字符串;
    参数sep设置分隔符,长度为1的字符串,默认为','
    参数na_rep设置缺失值填充,默认''
    参数float_format设置浮点数的格式字符串,如'%.2f'表示保留两位小数;
    参数columns设置要写的列,默认None,表示全部;
    参数header设置是否写入列名,默认True,如果给出字符串列表,则作为列别名;
    参数index设置是否写入行索引标签,默认True
    参数index_label设置行索引列的列名,默认None,会直接使用索引的名称,不写入列名需要设置为False
    参数encoding设置编码格式,python3默认utf-8
    参数chunksize设置每次批量写入的块大小,默认一次写入全部数据。

    read_csv方法用于读取csv文件:
    参数filepath_or_buffer设置文件路径或类文件对象,必须赋值;
    参数sep设置分隔符,长度为1的字符串,默认为','
    参数header设置作为列名的行号,可传入列表,会读取为多级索引,默认是第一行作为列名,当通过names显示传递列名时,该设置无效,另外,该参数会跳过注释行和空行;
    参数names设置列名列表,默认为None,如果文件不含列名,header也应设置为None,该参数不能有重复项,会报错;
    参数index_col设置作为行标签的列号,可传入列表,会读取为多级索引,默认不设置;
    参数usecols设置要读取的列列表,可以是列位置(int)或是列名(str)的列表,也可以传入对列名进行逻辑判断的函数,结果为True的列将被返回;
    参数prefix设置默认列名前缀,在没有设置列名时会将该前缀组合列号作为列名;
    参数dtype设置数据类型,dict类型,键为列名,值为numpy数据类型,默认None
    参数skiprows设置开头要跳过的行数,需要传入int,也可以设置要跳过的行号,传入list of int或对行号进行逻辑判断的函数;
    参数skipfooter设置尾部要跳过的行数,需要传入int
    参数nrows设置要读取的行数,用于分批读取大文件;
    参数na_filter设置是否检测缺失值,默认True,在确定没有缺失值的情况下可以关闭以提升读取性能;
    参数skip_blank_lines设置是否跳过空行,默认True
    参数encoding设置编码格式,python3默认utf-8
    参数error_bad_lines设置列数异常的坏行是否报错,默认TrueFalse时会直接剔除坏行;
    参数chunksize设置分块的大小,如果设置,会按该大小分块读取并以迭代器返回。

    2. 读写excel

    In [5]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])
    
    In [7]: df.to_excel('d:\\test.xlsx',sheet_name='test1',index=False)
    
    In [8]: df2=pd.read_excel('d:\\test.xlsx',sheet_name=0)
    
    In [9]: df2
    Out[9]: 
       a  b
    0  1  3
    1  2  4
    

    to_excel方法用于写入xls或xlsx文件:
    参数excel_writer设置文件路径或ExcelWriter,必须赋值;
    参数sheet_name设置要读取的工作表名称,默认'Sheet1'
    参数na_rep设置缺失值填充,默认''
    参数float_format设置浮点数的格式字符串,如'%.2f'表示保留两位小数;
    参数columns设置要写入的列,为列名的序列;
    参数header设置是否写入列名,默认True,当输入字符串列表时会当作列的别名;
    参数index设置是否写入行索引标签,默认True
    参数index_label设置行索引列的列名,当存在多级索引时应当输入字符串列表,默认None,会直接使用索引的名称;
    参数startrow设置写入的起始行,默认0
    参数startcol设置写入的起始列,默认0
    参数merge_cells设置单元格是否合并,默认True

    read_excel方法用于读取xls或xlsx文件:
    参数io设置文件路径或Excel文件对象,必须赋值;
    参数sheet_name设置要读取的工作表,可以传入序号(int)或工作表名(str)或是包含前两种的列表,传入None表示全部,默认0
    参数header设置解析为列名的行号,传入行号的列表时会解析为多级索引,如果没有列名,需要设置为None
    参数names设置列名,与header配合使用,默认None
    参数index_col设置解析为行标签的列号,传入列号的列表时会解析为多级索引,默认None
    参数usecols设置需要返回的列,可传入列号的列表list of int、列名的列表list of str、用逗号分隔的列名序列(例如 'A,B,C')或用冒号标识的列名范围(例如 'A:E')str,也可传入对列名进行逻辑判断的函数,结果为True的列将被返回;
    参数dtype设置数据类型,dict类型,键为列名,值为numpy数据类型,默认None
    参数skiprows设置开头要跳过的行数,需要传入int,也可以设置要跳过的行号,传入list of int或对行号进行逻辑判断的函数;
    参数skipfooter设置尾部要跳过的行数,需要传入int

    3. 读写sql

    In [21]: import sqlalchemy as sqla
        ...: username='sa'
        ...: password='123456'
        ...: server='127.0.0.1'
        ...: database='Test'
        ...: charset='utf8'
        ...: engine = sqla.create_engine('mssql+pymssql://{}:{}@{}/{}?charset={}'.format(username,password,server,database,charset))
    
    In [23]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])
    
    In [24]: df.to_sql('test1',engine,if_exists='append',index=False)
    
    In [25]: df.to_sql('test1',engine,if_exists='append',index=False)
    
    
    In [27]: df2=pd.read_sql('select * from test1',engine)
    
    In [28]: df2
    Out[28]: 
         a    b
    0  1.0  3.0
    1  2.0  4.0
    2  1.0  3.0
    3  2.0  4.0
    

    to_sql方法用于写入数据库:
    参数name设置要写入的表名,str类型;
    参数conn设置数据库连接,sqlalchemy.engine.Engine类型,需要配合sqlalchemy库使用,通过create_engine方法创建,连接字符串格式形如'{数据库类型}+{驱动名}://{用户名}:{密码}@{服务器地址}:{端口号}/{数据库名}?charset={字符集}'
    参数if_exists设置表存在时的处理方式,'fail'表示抛出异常,'replace'表示替换现有表,'append'表示作为新数据插入现有表,默认'fail'
    参数index设置行索引标签是否作为一列写入,默认True;
    参数index_label设置行索引标签列的列名,当存在多级索引时应当输入字符串列表,默认None,会直接使用索引的名称;
    参数chunksize设置每次批量写入的块大小,默认一次写入全部数据;
    参数dtype设置写入的数据类型,dict类型,键为列名,值为sqlalchemy数据类型;

    read_sql方法用于读取数据库:
    参数sql设置要执行的sql查询或表名;
    参数conn设置数据库连接,sqlalchemy.engine.Engine类型;
    参数index_col设置作为行标签索引的列名,传入列名的列表时会生成多级索引;
    参数coerce_float设置是否尝试将一些非字符串非数字对象(如decimal.Decimal)的值转换为浮点数,默认True
    参数params设置传递给执行sql的参数列表,具体格式由使用的驱动决定;
    参数parse_dates设置要解析为时间的列名列表,默认None
    参数columns设置要读取的列,仅在sql参数传入表名时有效,默认None读取全部列;
    参数chunksize设置分块的大小,如果设置,会按该大小分块读取并以迭代器返回。

    相关文章

      网友评论

          本文标题:[python][科学计算][pandas]简要使用教程8-读写

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