返回介绍

数学基础

统计学习

深度学习

工具

Scala

一、基本数据结构

发布于 2023-07-17 23:38:23 字数 17894 浏览 0 评论 0 收藏 0

  1. Pandas的两个主要数据结构: SeriesDateFrame

1. Series

  1. 创建: class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False,fastpath=False):

    参数:

    • data:它可以是一个字典、array-like、标量。表示Series包含的数据,如果是序列/数组,则它必须是一维的
    • 如果是字典,则字典的键指定了label。如果你同时使用了index,则以index为准。
    • 如果是标量,则结果为:该标量扩充为index长度相同的列表。
    • index:一个array-like或者一个Index对象。它指定了label。其值必须唯一而且hashable,且长度与data一致。如果data是一个字典,则index将会使用该字典的key(此时index不起作用)。如果未提供,则使用np.arange(n)
    • name:一个字符串,为Series的名字。
    • dtype:指定数据类型。如果为None,则数据类型被自动推断
    • copy:一个布尔值。如果为True,则拷贝输入数据data

    create

  2. 还可以通过类方法创建SeriesSeries.from_array(arr, index=None, name=None, dtype=None, copy=False, fastpath=False):其中arr可以是一个字典、array-like、标量。其他参数见1.

  3. 我们可以将Series转换成其他数据类型:

    • .to_dict():转换成字典,格式为{label->value}
    • .to_frame([name]):转换成DataFramenameIndex的名字
    • .tolist():转换成列表

    transform

  4. 可以将Series转换成字符串:

    
      .to_string(buf=None, na_rep='NaN', float_format=None, header=True, index=True, 
      length=False, dtype=False, name=False, max_rows=None)
    • buf:一个StringIO-like对象,是写入的buffer
    • na_rep:一个字符串,代表数值NaN
    • float_format:浮点数的格式化函数。应用于浮点列
    • header:一个布尔值。如果为True,则添加头部信息(index name
    • index:一个布尔值。如果为True,则添加index labels
    • length:一个布尔值。如果为True,则添加Series的长度信息
    • dtype:一个布尔值。如果为True,则添加dtype信息
    • name:一个布尔值。如果为True,则添加Series name
    • max_rows:一个整数值,给出了最大转换的行数。如果为None,则转换全部。

    返回转换后的字符串。 to_string

2. Index

  1. class pandas.Index(data=None, dtype=None, copy=False, name=None, fastpath=False, tupleize_cols=True):创建Index对象。

    参数:

    • data:一个array-like,必须是一维的
    • name:一个字符串,为Index的名字。
    • dtype:指定数据类型。如果为None,则默认为object
    • copy:一个布尔值。如果为True,则拷贝输入数据data
    • tupleize_cols:一个布尔值,如果可能则尽量创建MultiIndex对象

    create

  2. Index对象负责管理轴label和其他元数据(比如轴name)。构建Series/DataFrame时,传给index/columns关键字的任何数组或者序列都将被转化成一个IndexIndex 对象是immutable,因此用户无法对其进行修改。这样才能够使得Index对象在多个数据结构之间安全共享

  3. 存在多种索引类型。

    • Index:最泛化的Index对象,将轴label表示为一个Python对象组成的Numpy数组
    • Int64Index:针对整数的特殊Index
    • MultiIndex:层次化索引对象,表示单个轴上的多层索引。可以看做由元组组成的数组
    • DatatimeIndex:存储纳秒级时间戳,用numpydatatime64类型表示
    • PeriodIndex:针对Period数据(时间间隔)的特殊Index
  4. Index的功能类似一个固定大小的集合。其类似于集合的方法有(因为Index不可变,因此返回的都是新的Index对象):

    • .copy([name,deep,dtype]):返回一份Index的拷贝。
    • .append(other):连接另一个Index对象,产生一个新的Index对象。注意重复的label并不会合并
    • .difference(other):计算差集,返回一个Index对象
    • .intersection(other):计算交集,返回一个Index对象
    • .union(other):计算并集,返回一个新的Index对象
    • .isin(values[, level]):计算Index中各label是否在values
    • .delete(loc):删除下标loc处的元素,得到新的Index
    • .drop(labels[, errors]):删除传入的labels,得到新的Index
    • .insert(loc, item):在指定下标位置插入值,得到新的Index
    • .unique():返回Index中唯一值的数组,得到新的Index

    method_set

  5. 我们可以将Index转换成其他数据类型:

    • .astype(dtype,[,copy]):转换成另一个数据类型的Index,其labeldtype被转换成指定的值
    • .tolist():转换成列表
    • .to_series(**kwargs):转换成SeriesSeries的数据和label相同

    transform

  6. Index提供的选取方法有:

    • .get_indexer(target[, method, limit, ...]) :获取target(一个Index对象)对应的下标列表。

      • target:一个Index对象。我们要考察的就是Index中的每个labelself中的下标序列。

      • method:指定label的匹配方法。可以为None,表示严格匹配(如果不存在则下标为 -1)。如果为'pad'/'ffill',则:若未找到匹配的,则使用前向匹配。如果为'backfill'/'bfill',则:若未找到匹配的,则使用后向匹配。如果为'nearest',则:若未找到匹配的,则使用最近邻匹配。

        匹配时,假设你的Indexlabel是有序排列的(要么是升序,要么是降序)

      • limit:一个整数,指定前向/后向/最近填充时:如果有连续的kNaN,则只填充其中limit个。

      • tolerance:一个整数,用于给出在不匹配时,连续采用前向/后向/最近邻匹配的跨度的最大值。

    • .get_level_values(level):返回指定levelIndex,用于MultiIndex

    • .get_loc(key[, method, tolerance]):返回指定label处的下标,由key指定。其中methodtolerance参数见上述。如果method=None,且key指定的label找不到,则抛出异常。

    • .get_value(series, key):寻找Series指定label处的值。若key指定的label找不到,则抛出异常。

    • .slice_locs([start, end, step, kind]):计算给定start labelend label之间的下标序列,返回代表该下标序列的切片或者数组。其中不包括endselect

3. MultiIndex

  1. MultiIndex代表的是多级索引对象。它继承自Index,其中的多级label采用元组对象来表示。在MultiIndex内部,并不直接保存元组对象,而是使用多个Index对象保存索引中每级的label

  2. class pandas.MultiIndex(levels=None, labels=None, sortorder=None, names=None, copy=False, verify_integrity=True, _set_identity=True, name=None, **kwargs)

    参数:

    • levels:一个数组的列表,给出了每一级的level

    • labels:一个数组的列表,给出了每一级level的下标。第ilabel是这样产生的:

      • 首先获取labels[i],它是一个下标序列,代表第 $ MathJax-Element-8 $ 级。
      • 假设第 k位置为整数 3,在第 $ MathJax-Element-8 $ 级第 $ MathJax-Element-17 $ 位的label就是levels[i][3]
    • sortorder:一个整数,给出了已经排序好了的level级别。

    • names:一个字符串序列,给出了每个Indexname。其中每个级别对应一个Index

    • copy:一个布尔值。如果为True,则拷贝基础数据

    • verify_integrity:一个布尔值。如果为True,则检测各级别的label/level都是连续的且有效的

    • name:指定了本MultiIndex的名字

    你也可以通过下面的类方法来创建MultiIndex

    • MultiIndex.from_arrays(arrays[, sortorder, ...]):将二维序列转换为MultiIndex。其中arraysarray-like的序列,每个array-like按顺序的给出了一列label(一个级别)
    • MultiIndex.from_tuples(tuples[, sortorder, ...]) :将元组序列转换为MultiIndex。其中tuplestuple-like的序列,每个array-like按顺序的给出了一行label对(不同级别的一对)
    • MultiIndex.from_product(iterables[, ...]):根据多个可迭代对象生成一个MultiIndex,其中使用笛卡尔积的算法。其中iterables为可迭代对象的序列

    你也可以通过传递一个元组列表给Index(),并且将tupleize_cols设置为True来创建MultiIndex

    MultiIndex_create

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转换成字符串:

    
    
    xxxxxxxxxx
    to_string(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None, float_format=None, sparsify=None, index_names=True, justify=None, line_width=None, max_rows=None, 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文