Pandas 中如何获取列与特定值匹配的行的索引

我学pandas,就没搞明白过取值,一会儿好像这样一会儿好像这样,头疼的很,今天彻底的理解了一遍,做个笔记,希望也能帮到头疼的你。

先建立一个数据源,好慢慢理解。

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)  # 解决运行后行列显示不对齐的问题

data = [[130, 117, 106, 101], [112, 106, 142, 79], [136, 101, 85, 132], [126, 91, 95, 127], [139, 109, 99, 121]]
index_name = ['王宽', '黄蓉', '展昭', '雅雅', '红红']
columns = ['数学', '英文', '物理', '语文']
df = pd.DataFrame(data=data, columns=columns, index=index_name)
print(df, '\n--------------------------------')

先看看这几点,有助于你后面更好的理解,如果列举的代码看的累,可以看看最后的表格列举。


1、【无论是 行 还是 列,pandas的索引号是从0开始】

2、loc 方法

  • 列名(columns) 行名(index)为参数
  • 当只有一个参数时默认是 行名(index),即抽取整行数据,包括所有列
  • 例如 df.loc['展昭'],抽取的就是'展昭'一行包括所有列的数据

3、iloc 方法:

  • 列 其位置索引(即 0,1,2,3, ...)作为参数,0 表示第一行,1 表示第二行,2 表示第三行,以此类推。
  • 当只有一个参数时默认是 行索引,即抽取整行数据,包括所有列
  • 例如 df.iloc[0],抽取的就是第1行包括所有列的数据

 ※ a_1. 行操作:【抽取 一行】

# '展昭'行
print(df.loc['展昭']) 

# 第2行 ,(即 展昭 那一行)
print(df.iloc[2])

※ a_2. 行操作:【抽取 多行-指定行】

# '王宽' 和 '展昭' ,2行
print(df.loc[['王宽', '展昭']])

第1行 和 第2行, 2行
print(df.iloc[[0, 2]]) 

 

 ※ a_3. 行操作:【抽取 多行-连续行

print(df.loc['王宽':'展昭'])  # 从 '王宽'行 到 '展昭'行 
print(df.loc[:'雅雅':])  # 从 第1行 到 '雅雅'行 
print(df.iloc[0:2])  # 从 第1行 到 第2行 ;(左开右闭原则,取到第3行但不包含第3行)
print(df.iloc[2::])  # 从 第3行 到 最后1行

 ※ b_1. 列操作:【抽取 多列-指定列取一列的话就写一个列索引名或列索引号

print(df[['英文', '语文']])  # '英语'列 和 '语文'列 2列
print(df.loc[:, ['英文', '语文']])  # '英语'列 和 '语文'列 2列
print(df.iloc[:, [0, 1]])  # 第1列 和 第2列 2列;(无左开右闭原则,指定几列取几列)

※ b_2. 列操作:【抽取 多列-连续列】

 

print(df.loc[:, '英文':])  # 从 '英文'列 到 最后1列 
print(df.iloc[:, :3])  # 从 第1列 到 第3列 (左开右闭原则,取到第4列但不包含第4列)

※ c_1. 行列操作:【抽取 多行多列-指定的行列】

作者:Mae土豆
链接:https://www.zhihu.com/question/506727647/answer/2772916369
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

print(df.loc['王宽', '语文'])  # '王宽' 的 '语文' 成绩值,(即 访问某一单元格的值),【不是 DataFrame 对象数据】
print(df.loc[['王宽'], ['语文']])  # '王宽'行 的 '语文'列 的数据 ,即 '王宽' 的 '语文' 成绩,
print(df.loc[['王宽'], ['数学', '语文']])  # '王宽'行 的 '数学'列 和'语文'列 的数据 
print(df.iloc[1, 2])  # 第2行 的 第3列 的值,(即 访问某一单元格的值),【不是 DataFrame 对象数据】
print(df.iloc[[1], [2]])  # 第2行 的 第3列 的数据,(带有 行 列 索引,所以是 DataFrame 对象的数据)
print(df.iloc[1:, [2]])  # 从 第2行开始到最后1行 的 第3列 的数据,(或反过来理解,取 第3列的,第2行开始到最后1行的数据)
print(df.iloc[1:, [0, 2]])  # 从 第2行开始到最后1行 的 第1列 和 第3列 的数据,(或反过来理解,取 第1列 和 第3列的,第2行开始到最后1行的数据)
print(df.iloc[:, 3])  # 所有行 的 第4列 的数据,(或反过来理解,取 第14列的,所有行的数据)

 

简化式成表格表,再次强调【无论是 行 还是 列,pandas的索引号是从0开始】

所以,数据中,从'王宽'的索引行号是0,'数学'的索引列号是0,(我们自己会常说是第1行,第1列)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值