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 等。对于
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
异常)。
对于
DataFrame
对象,可以通过[]
来选取数据。下标可以为下列几种下标对象:一个属性(属性名为某个
column label
)/字典索引(键为column label
):返回对应的列对应的Series
不可以使用单个整数来索引
一个整数切片/一个
row label
切片:返回对应的行组成的DataFrame
。注意:label
切片同时包含了起始label
和终止label
一个一维
label array-like
:返回对应的列组成的DataFrame
一个布尔数组:返回数组中
True
对应的行组成的DataFrame
。一个布尔
DataFrame
:将该布尔DataFrame
中的False
对应的元素设置为NaN
(布尔DataFrame
中没有出现的值为False
)
Series
对象除了支持使用位置作为下标存取元素之外,还可以使用索引标签来存取元素。这个功能与字典类似,因此它也支持字典的一些方法,如Series.iteritems()
。对于
Series/DataFrame
切片方式的索引,返回的结果与原始对象共享基础数据。对于采用其他方式的索引,返回的结果并不与元素对象共享基础数据。对于
DataFrame
的赋值与列删除:- 将列表或者数组赋值给某个列时,其长度必须跟
DataFrame
的行数匹配。 - 将标量赋值给某个列时,会将标量扩充
- 将
Series
赋值给某个列时,会精确匹配DataFrame
的索引。如果DataFrame
中某个label
在Series
中找不到,则赋值NaN
(空位都将被填上缺失值) - 为不存在的列赋值会创建出一个新列(必须用字典的形式,不能用属性赋值的形式)
- 关键字
del
用于删除列(必须用字典的形式,不能用属性赋值的形式)
- 将列表或者数组赋值给某个列时,其长度必须跟
对于
Series
的赋值与删除:- 对于单个索引或者切片索引,要求右侧数值的长度与左侧相等
- 为不存在的
label
赋值会创建出一个新行(必须用字典的形式,不能用属性赋值的形式) - 关键字
del
用于删除行(必须用字典的形式,不能用属性赋值的形式)
如果
Series/DataFrame
的索引有重复label
,则数据的选取行为将有所不同:- 如果索引对应多个
label
,则Series
返回一个Sereis
,DataFrame
返回一个DataFrame
- 如果索引对应单个
label
,则Series
返回一个标量值,DataFrame
返回一个Series
你可以通过
Index.is_unique
属性得知索引是否有重复的。- 对于
[]
、字典索引、属性索引或者.loc/.ix
存取器,结论如上所述 - 对于
.at
存取器:如果索引对应单个label
,索引结果正常。如果索引对应多个label
,则Series
返回一个一维ndarray
;DataFrame
则抛出异常。
- 如果索引对应多个
对于
Series/DataFrame
,它们可以使用ndarray
的接口。因此可以通过ndarray
的索引规则来索引它们。df=pd.DataFrame(...)
df[:,0] #使用了 ndarray 的索引方式