4. DataFrame

  1. DataFrame 是一个表格型的数据结构,它含有一组有序的列,每一列都可以是不同的值类型(数值、日期、object类型)。其中object类型可以保存任何python对象,比如字符串。同一列必须是相同的值类型。

    • DataFrame 既有行索引,又有列索引。他可以被看作为Series组成的字典(共用同一个行索引)
    • DataFrame中面向行和面向列的操作基本上是平衡的。其实DataFrame中的数据是以一个或者多个二维块存放的

    DataFrameImg

  2. class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

    • data:可以是一个二维数组、字典、或者DataFrame
    • index:一个Index或者array-like对象(必须为一维的),它指定了行标签。如果未提供,则使用np.arange(n)
    • columns:一个Index或者array-like对象(必须为一维的),它指定了列标签。如果未提供,则使用np.arange(n)
    • dtype:指定数据类型。如果为None,则数据类型被自动推断
    • copy:一个布尔值。如果为True,则拷贝输入数据data

    常见的构造DataFrame有以下情况:

    • 二维ndarraydata就是数据,此时可以传入index/columns参数 create_ndarray
    • 一个字典,其中字典的值为一维数组、一维列表、一维元组:此时每个键就是列索引,对应的值就是列数据。要求所有序列的长度相同 create_dict_list
    • numpy的结构化数组:类似于由数组组成的字典
    • Series组成的字典:此时每个键就是列索引,对应的Series就是列数据。如果没有显式的指定行索引,那么各个Series的索引将会被合并成DataFrame的行索引。 create_dict_Series
    • 字典的字典:各个内层字典会成为一列,键会被合并成结果的行索引。跟Series 组成的字典情况一致
    • 字典或者Series的列表:每一项将会成为DataFrame的一行。字典的键、Series索引的并集将会成为DataFrame的列索引 create_list_Series
    • 列表、元组组成的列表:类似于二维ndarray
    • 另一个DataFrame:该DataFrame的索引将会被沿用,除非显式指定其他索引 create_frame
    • numpyMaskedArray:类似于二维ndarray,只是掩码值在结果DataFrame中会变成NA/缺失值

    columns/index有两种作用:如果构造的DataFrame没有索引,则它们分别给索引赋值;如果构造的DataFrame已有索引,则它们按照指定顺序排列指定的索引。

  3. 可以通过下面的类方法从其他数据结构中创建DataFrame

    • DataFrame.from_dict(data, orient='columns', dtype=None):从字典中创建DataFrame

      • data:是个字典,其格式为: {key:array-like}或者{key:dict}
      • orient:指定了key为行还是列。参数的值为'columns'key为列的label,默认行为);或者'index'key为行的label
      • dtype:数据类型。如果为None,则自动推断。

    from_dict

    • DataFrame.from_items(items, columns=None, orient='columns'):从元组序列中创建DataFrame

      • items:为元组序列,元组格式为:(key,value),其中value为表示一维数据的序列或者Series对象。

      • columns:一个序列,给出列的labels

        • orient='index'时必须传入(此时key 指定的是行的label),且长度不能大于DataFrame的列数。
        • orient='columns时,key就是列的label,此时columns关键字参数指定的列label必须等于某个key;否则抛出异常。
    • orient:参见.from_dict的解释。

    from_items

  4. 你可以将DataFrame转换为其他数据类型。

    • .to_dict(*args, **kwargs)方法:转换成字典。参数orient决定了转换方式。

      • orient ='dict':字典的形式为: {col_label:{index_label:value}}(默认行为)
      • orient ='list':字典的形式为: {col_label:[values]}
      • orient ='series':字典的形式为: {col_label:Series(values)}
      • orient ='split':字典的形式为: {'index':[index_labels],'columns':[col_labels],'data':[values]}
      • orient ='records':字典的形式为: [{col_label:value},...,{col_label:value}]
      • orient ='index':字典的形式为: {index_label:{col_label:value}}
      • 你可以使用简化字符串,如's'代表'series''sp'代表'split'
    • .to_records(index=True, convert_datetime64=True)方法:转换成结构数组。

      • index:一个布尔值。如果为True,则结果中包含index
      • convert_datetime64:一个布尔值,如果为True,则转换DatetimeIndexdatetime.datetime

    transform_1 transform_2

  5. 可以将DateFrame转换成字符串:

    1. to_string(buf=None, columns=None, col_space=None, header=True, index=True,
    2. na_rep='NaN', formatters=None, float_format=None, sparsify=None,
    3. index_names=True, justify=None, line_width=None, max_rows=None,
    4. max_cols=None, show_dimensions=False)
    • buf:一个StringIO-like对象,是写入的buffer

    • columns:一个序列,指定了列标签的一个子集,该子集的数据被输出

    • col_space:一个整数,指定了每一列的最小宽度

    • header:一个布尔值。如果为True,则添加头部信息(column labels

    • index:一个布尔值。如果为True,则添加index labels

    • na_rep:一个字符串,代表数值NaN

    • float_format:浮点数的格式化函数(单参数)。应用于浮点列

    • formatters:一个单参数函数的列表(列表长度等于列数)或者一个单参数函数的字典。

      • 如果是列表,则根据列号,对应使用格式化函数
      • 如果是字典,则根据列label,对应使用格式化函数
    • sparsify:一个布尔值。Set to False for a DataFrame with a hierarchical index to print every multiindex key at each row, default True

    • index_names:一个布尔值。如果为True,则添加index names

    • justify:指定column label的对齐方式。可以为'left'(左对齐),或者'right'(右对齐)。默认为None

    返回转换后的字符串。

    to_string