【pandas小记】pandas选择数据

1.索引分类

1.1类型

索引类型说明
整数索引与数组的整数下标相同,从0开始到n-1,通过下标选择数据,可以使用切片的方式选择数据。
标签索引参数index、columns中指定的名称,直接通过名称选择数据,也可以使用切片的方式选择数据。
布尔索引这与numpy的索引方式相似,相当于选择满足条件的数据。

1.2 注意

1,若直接使用[ ]选择数据时,不能直接选择具体的元素。
用’column_name’,即列的轴标签选择列的数据。
用’index_sliceable’,即行的整数索引或标签索引的切片选择行数据。

import pandas as pd
import numpy as np

frame = pd.DataFrame(np.arange(25).reshape((5, -1)),
                     index=list('abcde'),
                     columns=['one', 'two', 'three', 'four', 'five'])
print(frame[['one', 'five']])  #用'column_name'

print(frame[:3])   # 用'index_sliceable',index切片

至于为啥会是这样规定,debug了下,没看懂,但是看到这两句代码,有知道原因的可麻烦评论告诉我。

indexer = self.columns.get_loc(key)
indexer = convert_to_index_sliceable(self, key)

2,在切片时,整数索引与标签索引的切片结果有差异

print(frame[:3])    #左闭右开
"""
   one  two  three  four  five
a    0    1      2     3     4
b    5    6      7     8     9
c   10   11     12    13    14
"""
print(frame[:'c'])    #左闭右闭
"""
   one  two  three  four  five
a    0    1      2     3     4
b    5    6      7     8     9
c   10   11     12    13    14
"""

可以看出区别,用整数索引进行切片时,左边等于右边不等于,即是0<= index < 2,而使用标签索引则是’a’<= index<=‘c’。 所以需要注意这两种类型的索引使用。

2.loc和iloc

DataFrame可以使用loc和iloc来选择数据,而两者是根据“标签”或“整数”索引来选择的,

print(frame.loc['a':'c', :'three'])
"""
   one  two  three
a    0    1      2
b    5    6      7
c   10   11     12
"""
print(frame.iloc[0:, :3])
"""
   one  two  three
a    0    1      2
b    5    6      7
c   10   11     12
d   15   16     17
e   20   21     22
"""

3.at和iat

与loc和iloc类似,都提供基于整数或者标签索引的查找。如果只需要获取或设置单个值时,可使用at和iat。

print(frame.at['a', 'three'])   #2
print(frame.iat[0, 3])   #3

frame.iat[0, 0] = 100   # 修改元素
print(frame)

最后,正是由于pandas功能这么强大,整数索引和标签索引,将标签设置为整数时,就会造成歧义。所以,如果使用整数作为标签,那么在数据选择是使用loc 或者 iloc,这样可以明确知道使用的是哪种类型的索引,从而精确地选择数据。

### 回答1: "indexer" 赋值为 "self.columns.get_loc(key)"。这表示程序正在使用 "self.columns" 的 "get_loc" 方法来获取字符串 "key" 在 "self.columns" 中的位置索引,并将结果赋值给变量 "indexer"。 ### 回答2: 首先需要介绍一下 Pandas 中的两个关键概念:DataFrame 和 Series。DataFrame 是 Pandas 中最重要的数据结构之一,它类似于电子表格或 SQL 表格,是由多个 Series 组成的二维表格。而 Series 则是 DataFrame 的一列,它是由一组数据和一组与之相对应的标签(即索引)组成的一维数组。 当我们需要对 DataFrame 或 Series 进行操作时,通常需要使用索引来指定需要操作的数据位置。而在 Pandas 中,每个 DataFrame 和 Series 都有一个对应的索引数组,可以通过索引数组中的元素来查询和操作相应的数据。 在这里,indexer = self.columns.get_loc(key) 这一行代码的作用是获取 DataFrame 中指定列的索引位置(即整数索引值)。这个过程分为两步: 1. 使用 self.columns 获取 DataFrame 的列索引,它返回的是一个 Index 类型的数组,其中保存了 DataFrame 的所有列名。 2. 使用 get_loc() 方法查找指定列名 key 在列索引中的位置,如果该列名存在则返回对应的整数索引值,否则会抛出 KeyError。 例如,假设有如下的 DataFrame df: | | Name | Age | Gender | |---|---|---|---| | 0 | Alice | 25 | F | | 1 | Bob | 30 | M | | 2 | Chris | 35 | M | 执行 indexer = df.columns.get_loc('Age') 则会返回整数值 1,因为列名 'Age' 对应的位置在 DataFrame 的第二列,对应的整数索引值为 1。 在实际应用中,获取列索引的整数值可以方便地进行数据的选取、插入、修改和删除等操作。 ### 回答3: indexer = self.columns.get_loc(key)是一个PythonPandas库的代码片段。它的作用是在DataFrame中查找指定列的索引位置。其中self表示一个DataFrame对象,columns属性是DataFrame对象中所有列的标签列表。get_loc()函数是Pandas库中的函数,用于查找具有给定标签的列的索引位置。key是要查找的列的标签。 从具体代码角度来看,这行代码的作用是得到DataFrame对象self中指定列key索引位置,并将其赋值给变量indexer。这个索引位置可以用来在DataFrame对象中定位或访问指定列的数值。这样做的好处是可以避免在DataFrame对象中进行全局查找,提高代码执行效率。 需要注意的是,如果指定列的标签在DataFrame对象中不存在,get_loc()函数就会引发KeyError异常。此外,如果有相同的标签,get_loc()函数将返回它们中的第一个索引位置。如果需要查找所有具有相同标签的列的索引位置,需要使用get_indexer()函数。 综上所述,indexer = self.columns.get_loc(key)是一个非常实用的Pandas库代码片段,可以快速、方便地获取DataFrame对象中指定列的索引位置,提高代码执行效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值