1. 索引和轴的变换

  1. 重新索引:Series/DataFrame.reindex(index=None, **kwargs)

    • index:一个array-like对象,给出了新的indexlabel

    • method:当新的label的值缺失时,如何处理。参数值可以为:

      • None:不做任何处理,缺失地方填充NaN
      • 'backfill'/'bfill':用下一个可用的值填充该空缺(后向填充)
      • 'pad'/'ffill':用上一个可用的值填充该空缺(前向填充)
      • 'nearest':用最近的可用值填充该空缺
    • copy:一个布尔值,如果为True,则返回一个新的Series对象(即使传入的index与原来的index相同)

    • level:一个整数或者name,在MultiIndex的指定级别上匹配简单索引

    • fill_value:一个标量。指定缺失值的填充数据,默认为NaN(如果该参数与method同时出现,则以method为主)

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

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

    对于DataFrame,多了关键字参数:

    • columns:一个array-like对象,给出了新的columnslabel

    对于DataFrame,如果.reindex()只传入一个序列,则默认会重索引行label。如果同时重索引行label和列label,则method插值只能按照行来进行(即 0 轴)

    reindex reindex reindex

  2. 将列数据变成行索引(只对DataFrame有效,因为Series没有列索引),其中:col label变成index name,列数据变成行label

    1. DataFrame.set_index(keys, drop=True, append=False, inplace=False,
    2. verify_integrity=False)
    • keys: 指定了一个或者一列的column label。这些列将会转换为行index
    • drop:一个布尔值。如果为True,则keys对应的列会被删除;否则这些列仍然被保留
    • append:一个布尔值。如果为True,则原有的行索引将保留(此时一定是个多级索引);否则抛弃原来的行索引。
    • inplace:一个布尔值。如果为True,则原地修改并且返回None
    • verify_integrity:一个布尔值。如果为True,则检查新的index是否有重复值。否则会推迟到检测过程到必须检测的时候。

    set_index0 set_index1

  3. reset_index会将层次化的行index转移到列中,成为新的一列。同时index 变成一个整数型的,从0开始编号:

    1. DataFrame.reset_index(level=None, drop=False, inplace=False,
    2. col_level=0, col_fill='')
    3. Series.reset_index(level=None, drop=False, name=None, inplace=False)
    • level:一个整数、str、元组或者列表。它指定了将从层次化的index中移除的level。如果为None,则移除所有的level
    • drop:一个布尔值。如果为True,则并不会插入新的列。如果为False,则插入新的列(由index,组成,其列名为'index')。
    • inplace:一个布尔值。如果为True,则原地修改并且返回None
    • col_level:如果列索引也是多层次的,则决定插入到列索引的哪个level
    • col_fill:如果列索引也是多层次的,则决定插入之后其他level的索引如何命名的。默认情况下就是重复该index name

    对于Seriesname就是插入后,对应的列label

  4. 丢弃某条轴上的一个或者多个labelSeries/DataFrame.drop(labels[, axis, level, inplace, errors]):

    • labels:单个label或者一个label序列,代表要被丢弃的label
    • axis:一个整数,或者轴的名字。默认为 0 轴
    • level:一个整数或者level名字,用于MultiIndex。因为可能在多个level上都有同名的label
    • inplace:一个布尔值。如果为True,则原地修改并且返回None
    • errors:可以为'ignore'/'raise'

    drop

  5. DataFrame.T方法会对DataFrame进行转置,使得行与列互换(行索引与列索引也互换) DataFrame_T

  6. 交换两个轴: DataFrame/Series.swapaxes(axis1, axis2, copy=True) swapaxes

  7. 交换多级索引的两个levelDataFrame/Series.swaplevel(i=-2, j=-1, axis=0, copy=True)

    • i/j为两个level的整数position,也可以是name字符串。 swaplevel
  8. 想修改轴label有两种方案:

    • 可以采用Index.map(mapper)方法。其中mapper是个可调用对象,它对每个label进行调用然后返回新的label。该函数返回一个新的Index对象。然后将其赋值给pandas对象的.index/.columns属性。

    • 调用.rename方法:

      1. Series.rename(index=None, **kwargs)
      2. DataFrame.rename(index=None, columns=None, **kwargs)
      • index/columns:一个标量、dict-like、或者一个函数。

        • 标量:修改了Series.name属性。但是对于DataFrame会抛出异常
        • dict-like或者函数:应用于对应轴的label
      • copy:如果为True,则拷贝底层数据(此时inplace=False

      • inplace:一个布尔值。如果为True,则原地修改,此时忽略copy参数。否则新创建对象。

    rename0 rename1