美文网首页IT🐶胶水Python
Python一周一模块:pandas-2

Python一周一模块:pandas-2

作者: 爱折腾的大懒猪 | 来源:发表于2019-06-21 23:39 被阅读6次

    读取/写入数据

    读取/写入表格型文本文件

    现在推荐都使用read_csv来读取一定分隔符分隔的数据, read_table函数将被废弃.

    • read_csv 函数: 读取csv文件, 是指默认使用逗号 , 分隔的数据文件. 参数众多, 常用的参数如下:
      • filepath_or_buffer, 主参, 必须. 接受文件路径, URL(字符串), 文件类对象(包括StringIO)
      • sep : 指定分隔符, 默认,. 如果分隔符指定为\t, 则等于read_table. 甚至可以用正则. 和delimiter等价
      • dtype : 指定数据类型, 可以单类型, 可以是字典, 如{'a':np.float64,'b':np.int.32}.
      • header : 设置标题(列名)所在的行号并从该行以后读取数据. None不读取标题,0则第一行为标题.
        默认是'infer':使用names指定标题时,header=None(指明不读取标题行), 没有则为0.
        使用明确的0可以压制names. 甚至可以是list型(较复杂用法).
      • names : 指定标题(列名). array类数据.
      • index_col : 指定索引列. 指定的列的内容会被作为行名. 一般使用整形或字符串,也可以列表(层次化索引). 索引列的名称会单独一行标题.
      • skip_rows : 跳过某些行. (int,list或者callable, callable时行号输入,当返回True就跳过)
      • nrows : 指定读取的行数 (int型). 对于读取部分文件时用.
      • skip_footer:需要忽略的行数(从文件末尾开始计算)
      • na_values : 添加新的值作为NaN. 默认有多种,如NAN,null, NA, N/A, -1.#IND, -1.#QNAN等. 可以是字符串, 列表, 甚至是字典(比较复杂)
      • converters: 转换数值, 使用字典, 如{'a':funcA}. 会压制dtype.
      • comment:该字符以后的会被作为注释而被忽略(指定为一个字符)。和空行一样会被header跳过,但不影响skiprows
      • skip_blank_lines : 跳过空行, 缺省True. 否则,会被作为NaN.
      • iterator :返回一个TextParser以便逐块读取文件。
      • chunksize:文件块的大小(用于迭代)。
      • verbose:打印各种解析器输出信息,如“非数值列中的缺失值的数量”等。
      • encoding:用于unicode的文本编码格式。例如,"utf-8"或"gbk"等文本的编码格式。
      • squeeze:如果数据经过解析之后只有一列的时候,返回Series。
      • thousands:千分位分隔符,如","或"."。
      • decimal : 小数分割符, 默认..
      • dayfirst:当解析有歧义的日期时,将其看做国际格式(例如,7/6/2012 ---> June 7 , 2012)。默认为False。
      • date_parser:用于解析日期的函数。
      • keep_date_col:如果连接多列解析日期,则保持参与连接的列。默认为False。
      • parse_dates:尝试将数据解析为日期,默认为False。如果为True,则尝试解析所有列。除此之外,参数可以指定需要解析的一组列号或列名。
        如果列表的元素为列表或元组,就会将多个列组合到一起再进行日期解析工作。
      • compression : 压缩文件, 缺省"infer",可以指定gzip,bz2,zip,xz等.
    • read_table 函数: 读取文件, 默认以制表符 \t 分隔的数据文件. 即将被废弃, 使用read_csv代替.
    • read_fwf 函数: 以固定长度的形式读取文件.
      • colspecs : 元组(int,int)'infer'的列表。可选的一个元组列表,给出每行固定宽度字段的范围为半开间隔(即[from,to[ )。
        字符串值'infer'可用于指示解析器尝试从未通过skiprows(default ='infer')跳过的数据的前100行检测列规范。
      • widths : int的列表,可选. 如果间隔是连续的,则可以使用字段宽度列表(list)代替'colspecs'。
      • infer_nrows :int,默认为100. 让解析器确定colspecs时要考虑的行数。
    # 可以使用多个键作为行索引(同理列索引也可以多重)
    '''
    key1,key2,value1,value2
    a,a,1,2
    a,b,3,4
    b,c,5,6
    b,d,7,8
    '''
    
    data = pd.read_csv("data.txt",index_col=["key1","key2"])
    print(data)
    
    '''
                value1  value2
    key1 key2
    a     a       1       2
          b       3       4
    b     c       5       6
          d       7       8
    '''
    
    # 指定某一列的数据类型
    pd.read_csv("data.txt", dtype={2:np.float64,3:'People'})
    
    # 使用正则表达式作为分隔符, 例如下面会将单个或多个空格类符号作为分隔符. 
    pd.read_csv("data.txt",sep="\s+")
    
    # 只将某些列的某些值作为NaN, 使用字典.
    data1 = pd.read_csv("data.txt",na_values={'name':['python','c++']})
    
    # 位置  1    6    11      20   24      33   37   43
    data=' id8141    360.242940   149.910199   11950.7\n' \
         ' id1594    444.953632   166.985655   11788.4\n' \
         ' id1849    364.136849   183.628767   11806.2\n' \
         ' id1230    413.836124   184.375703   11916.8\n' \
         ' id1948    502.953953   173.237159   12468.3'
    
    colspecs = [(1, 7), (11, 21), (24, 34), (37, 44)] #栏位严格的位置
    pd.read_fwf(pd.io.common.StringIO(data), colspecs=colspecs, header=None, index_col=0)
    colspecs = [(0, 10), (11, 21), (24, 34), (37, 44)] # 实际数据前后包含部分空格不影响.
    pd.read_fwf(pd.io.common.StringIO(data), widths=[8,13,13,11], header=None) # 使用width指定长度.
    pd.read_fww(pd.io.common.StringIO(data), header=None) # 用前100行来推断, 结果同上. 
    

    读取 JSON格式

    读取Excel格式

    读取SQL

    • read_sql_table(table_name, con[, schema, …] : 读取SQL数据库table到df.
    • read_sql_query(sql, con[, index_col, …]) : 读取SQL查询的结果到df.
    • read_sql(sql, con[, index_col, …]) : Read SQL query or database table into a DataFrame.
    import pandas as pd
    import sqlite3
    
    # Read sqlite query results into a pandas DataFrame
    con = sqlite3.connect("data/portal_mammals.sqlite")
    df = pd.read_sql_query("SELECT * from surveys", con)
    
    # Verify that result of SQL query is stored in the dataframe
    print(df.head())
    
    con.close()
    

    其他格式

    • read_pickle : 读取pickle出来的pandas对象
    • read_clipboard([sep]) : 读取剪贴板数据(实际使用read_csv)
    • read_sas : 读取SAS文件(XPORT/SAS7BDAT格式)
    • read_gbq : 读取Google BigQuery
    • read_stata : 读取 STATA文件.
    • read_parquet : 读取 parquet对象

    相关文章

      网友评论

        本文标题:Python一周一模块:pandas-2

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