Pandas---3.下标存取([]/loc/iloc/ix/at/iat/query方法/多级索引/整数label)

一、[ ] 操作符

1.Index

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

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

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

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

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

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

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

举例:

2.Series

(1)[]

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

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

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

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

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

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

举例:

(2)索引标签

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

举例:

(3)对于Series的赋值与删除

  1. 对于单个索引或者切片索引,要求右侧数值的长度与左侧相等
  2. 为不存在的label赋值会创建出一个新行(必须用字典的形式,不能用属性赋值的形式)
  3. 关键字del用于删除行(必须用字典的形式,不能用属性赋值的形式)

举例:

3.DataFrame

(1)[]

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

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

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

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

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

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

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

举例:

(2)对于DataFrame的赋值与列删除

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

举例:

4.注意事项

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

(2)如果Series/DataFrame的索引有重复label,则数据的选取行为将有所不同:

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

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

  1. 对于[]、字典索引、属性索引或者.loc/.ix存取器,结论如上所述
  2. 对于.at存取器:如果索引对应单个label,索引结果正常。如果索引对应多个label,则Series返回一个一维ndarrayDataFrame则抛出异常。

举例:

(3)对于Series/DataFrame,它们可以使用ndarray的接口。因此可以通过ndarray 的索引规则来索引它们。

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

二、loc/iloc/ix 存取器

1.loc

(1)Series

对于Series.loc[]的下标对象可以为:

  1. 单个label,此时返回对应的值
  2. labelarray-likelabel slice以及布尔array-like:返回对应值组成的Series

举例:

(2)DataFrame

对于DataFrame.loc[]的下标对象是一个元组,其中两个元素分别与DataFrame的两个轴对应。如果下标不是元组,则该下标对应的是第0轴,第一轴为默认值:

  1. 每个轴的下标都支持单个labellabel array-likelabel slice、布尔array-like
  2. 若获取的是某一列或者某一行,则返回的是Series;若返回的是多行或者多列,则返回的是DataFrame;如果返回的是某个值,则是普通的标量。

举例:

2.iloc

.iloc[].loc[]类似,但是.iloc[]使用整数下标,而不是使用label。注意整数切片不包括最后一个值。

(1)Serise

(2)DataFrame

 

3.ix

.ix[]存取器综合了.iloc/.loc:它可以混合使用label和位置下标。注意:如果有整数索引,则应该使用.loc/.iloc从而避免混淆

(1)Series

 

(2)DataFrame

 

4.注意

(1)Index对象不能使用loc/iloc/ix存取器

(2)对于.loc/.iloc/.ix

  1. 如果某轴的索引为array-like或者布尔array-like,则返回的结果与原来的对象不再共享基础数据;
  2. 如果轴的索引全部都是slice或者单个整数、单个label,则返回的结果与原来的对象共享基础数据。 

三、at/iat 存取器

1..at.iat分别使用label和整数下标获取单个值。它类似于.loc/.iloc,但是.at/.iat的速度更快

  1. 每个索引只能是单个label或者单个整数

举例:

2.对于DataFrame.lookup(row_labels, col_labels)类似于:.loc[row_labels, col_labels],但是.lookup返回的是一维ndarray

  1. 要求row_labelscol_labels长度相同。(row_labels[0],col_labels[0]决定了结果中第一个元素的位置,...(row_labels[i],col_labels[i]决定了结果中第 i+1个元素的位置,

举例:

3.DataFrame.get_value(index, col, takeable=False)等价于.loc[index, col]它返回单个值。而Series.get_value(label, takeable=False)等价于.loc[label],它也返回单个值 

举例:

4..get(key[, default])方法与字典的get()方法的用法相同。对于DataFramekey为col_label

举例:

5..head([n=5]).tail([n=5])返回头部/尾部n行数据 

四、query方法

1.对于DataFrame,当需要根据一定的条件对行进行过滤时,通常可以先创建一个布尔数组,然后使用该数组获取True对应的行。另一个方案就是采用query(expr, inplace=False, **kwargs)方法:

  1. expr是个运算表达式字符串,如'label1 >3 and label2<5'
  2. 表达式中的变量名表示对应的列,可以使用not/and/or等关键字进行向量布尔运算。该方法会筛选出那些满足条件的行。
  3. 如果希望在表达式中使用Python变量,则在变量名之前使用@
  4. inplace是个布尔值,如果为True,则原地修改。否则返回一份拷贝。

举例:

 

五、多级索引

1.对于.loc/.ix/[],其下标可以指定多级索引中,每级索引上的标签。

  1. 多级索引轴对应的下标是一个下标元组,该元组中每个元素与索引中每级索引对应
  2. 如果下标不是元组,则将其转换成长度为1的元组
  3. 如果元组的长度比索引的层数少,则在其后面补充slice(None)

举例:

六、整数 label

1.label不一定是字符串,也有可能是整数(如RangeIndex/Int64Index等),尤其是当label是自动生成的时候。

当你的label是整数时,面向整数的下标索引总是面向label的,而不是面向position的。因此推荐使用.loc来基于label索引,使用.iloc来基于position索引。

举例:

 

 

 

  

posted @   nxf_rabbit75  阅读(1210)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2018-12-27 去掉python的警告
一、[ ] 操作符1.Index2.Series(1)[](2)索引标签(3)对于Series的赋值与删除3.DataFrame(1)[](2)对于DataFrame的赋值与列删除4.注意事项二、loc/iloc/ix 存取器1.loc(1)Series(2)DataFrame2.iloc(1)Serise(2)DataFrame3.ix(1)Series(2)DataFrame4.注意三、at/iat 存取器四、query方法五、多级索引六、整数 label
点击右上角即可分享
微信分享提示