1. [ ] 操作符

  1. 对于Index对象,可以通过[]来选取数据,它类似于一维ndarray的索引。下标可以为下列几种下标对象:

    • 一个整数下标。此时返回对应的label

    • 一个整数slice。此时返回对应的Index(根据一维labels先切片,再组装成Index

    • 一个array-like对象(元素可以为下标或者布尔值)。此时返回对应的Index。(根据一维labels先索引,再组装成Index

    • None组成的二元组,其中None相当于新建一个轴。

      • 如果None为第一个元素,则新建的轴为 0 轴;
      • 如果None为第二个元素,则新建的轴为 1 轴。
      • 另外idx[None]等价于idx[None,:],但是idx[None]返回的是ndarray
      • 它并没有将Index 转换成MultiIndex,只是将Index内部的数据数组扩充了一个轴

    Index 的索引只支持整数/整数slice/整数序列/布尔序列/整数数组/布尔数组/None 等。

    slect_sq_brackets_index

  2. 对于Series对象,可以通过[]来选取数据,它类似于一维ndarray的索引。下标可以为下列几种下标对象:

    • 一个整数下标/一个属性(属性名为某个label)/字典索引(键为label):返回对应的数值

    • 一个整数切片/一个label切片:返回对应的Series。(根据一维Series先切片,再组装成Series)。注意:label切片同时包含了起始label和终止label

    • 一个整数array-like/一个label array-like/一个布尔ndarray:返回对应的Series。(根据一维Series先索引,再组装成Series

    • 一个二维整数array-like/二维label array-like:返回对应值组成的二维ndarray

      注意:Series必须使用布尔数组来索引,不支持布尔序列来索引(抛出KeyError异常)。

    slect_sq_brackets_series1 slect_sq_brackets_series2

  3. 对于DataFrame对象,可以通过[]来选取数据。下标可以为下列几种下标对象:

    • 一个属性(属性名为某个column label)/字典索引(键为column label):返回对应的列对应的Series

      不可以使用单个整数来索引

    • 一个整数切片/一个row label切片:返回对应的行组成的DataFrame。注意:label切片同时包含了起始label和终止label

    • 一个一维label array-like:返回对应的列组成的DataFrame

    • 一个布尔数组:返回数组中True对应的行组成的DataFrame

    • 一个布尔DataFrame:将该布尔DataFrame中的False对应的元素设置为NaN(布尔DataFrame中没有出现的值为False

    slect_sq_brackets_df1 slect_sq_brackets_df2

  4. Series对象除了支持使用位置作为下标存取元素之外,还可以使用索引标签来存取元素。这个功能与字典类似,因此它也支持字典的一些方法,如Series.iteritems()iteritems

  5. 对于Series/DataFrame切片方式的索引,返回的结果与原始对象共享基础数据。对于采用其他方式的索引,返回的结果并不与元素对象共享基础数据。 same_base

  6. 对于DataFrame的赋值与列删除:

    • 将列表或者数组赋值给某个列时,其长度必须跟DataFrame的行数匹配。
    • 将标量赋值给某个列时,会将标量扩充
    • Series赋值给某个列时,会精确匹配DataFrame的索引。如果DataFrame中某个labelSeries中找不到,则赋值NaN(空位都将被填上缺失值)
    • 为不存在的列赋值会创建出一个新列(必须用字典的形式,不能用属性赋值的形式)
    • 关键字del用于删除列(必须用字典的形式,不能用属性赋值的形式)

    assign_1 assign_2

  7. 对于Series的赋值与删除:

    • 对于单个索引或者切片索引,要求右侧数值的长度与左侧相等
    • 为不存在的label赋值会创建出一个新行(必须用字典的形式,不能用属性赋值的形式)
    • 关键字del用于删除行(必须用字典的形式,不能用属性赋值的形式) assign
  8. 如果Series/DataFrame的索引有重复label,则数据的选取行为将有所不同:

    • 如果索引对应多个label,则Series返回一个SereisDataFrame返回一个DataFrame
    • 如果索引对应单个label,则Series返回一个标量值,DataFrame返回一个Series

    你可以通过Index.is_unique属性得知索引是否有重复的。

    • 对于[]、字典索引、属性索引或者.loc/.ix存取器,结论如上所述
    • 对于.at存取器:如果索引对应单个label,索引结果正常。如果索引对应多个label,则Series返回一个一维ndarrayDataFrame则抛出异常。 select_label_nounique select_label_nounique
  9. 对于Series/DataFrame,它们可以使用ndarray的接口。因此可以通过ndarray 的索引规则来索引它们。

    1. df=pd.DataFrame(...)
    2. df[:,0] #使用了 ndarray 的索引方式