pandas的行列获取/pandas iloc和loc的使用/如何获取pandas的行和列

Pandas行和列的获取

由于平时没有系统的学习pandas,导致在实际应用过程中,对于获取df中的行和列经常出现问题,于是总结一下,供自己以后参考。

参考的书籍在线版链接:利用 Python 进行数据分析 · 第 2 版

0 查看手册

请当你看完1-5的内容再来看该部分,用于理解和以后的查询。

功能
获取列df.loc[: , 列名序列]df.iloc[ : , 列索引序列]df[列名序列]
获取行df.loc[行名序列]df.iloc[ 行索引序列]df[行名:列名]
获取行和列1df.loc[行名序列,列名序列]df.iloc[ 行索引序列,列索引序列]
获取行和列2df.loc[行名开始:行名结束,列名开始:列名结束]df.iloc[行索引开始:行索引结束,列索引开始:列索引结束]
序列的含义

由列名或者行名(列索引,行索引)组成的列表;

  1. 比如获取多列(行), 方法为:df[['col1','col2']]
  2. 当只获取一个列(行)的时候,可以直接填写,df['col1']

切片的含义

类似于列表的切片,开始:结束,pandas会获取开始->结束之间的行(列)

  1. 切片时,loc包含两端点,左闭右闭;iloc不包含结束点,左闭右开

  2. “:”表示行(列)切片的意思,行开始点:行结束点。

loc的用法

loc[行序列,列序列]分别表示获取指定的行序列和列序列范围的内容(iloc同理)

  1. 当只获取行的时候,列可以省略

  2. 当只获取列的时候,行不能省略,可以写作loc[ : , 列索引],意思是所有行都选中

1 创建一个DataFrame作为示例

import pandas as pd
# 创建一个df
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
                      index=['one', 'two', 'three', 'four',
                             'five', 'six'])
frame
yearstatepopdebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
three2002Ohio3.6NaN
four2001Nevada2.4NaN
five2002Nevada2.9NaN
six2003Nevada3.2NaN

2 获取行和列索引

在学习获取行列之前,我们先了解一下如果获取行和列的索引

# 获取行、列名称的方法
frame.index
Index(['one', 'two', 'three', 'four', 'five', 'six'], dtype='object')
frame.columns
Index(['year', 'state', 'pop', 'debt'], dtype='object')

3 常用的索引方式

首先我们明确两个概念:

  • 名称索引,即使用行和列的名称进行索引

    ['year', 'state', 'pop', 'debt']表示的就是名称索引,它表示行和列的名称是啥

  • 整数索引,即使用行和列所在第几行第几列进行索引

    整数索引就类似于列表的下标。

4 名称索引获取行列

4.1 获取列 --> df[列名]

df[列名序列]

获取一列:df[列名]

如果获取一列,我们直接写入列名即可

# 获取一列
frame["year"]
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64
获取多列: df[ [多个列名] ]

​ 如果获取多列,需要写入多个列名的列表

# 获取多列
frame[['year', 'state']]
yearstate
one2000Ohio
two2001Ohio
three2002Ohio
four2001Nevada
five2002Nevada
six2003Nevada

4.2 获取行 -> df.loc[]

  • 使用方法类似df[列名序列]不过要使用的语句为:df.loc[]
获取一行
# 获取一行的的方法
frame.loc['one']
year     2000
state    Ohio
pop       1.5
debt      NaN
Name: one, dtype: object
获取多行
# 获取多行的方法
frame.loc[['one','two']]

yearstatepopdebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
使用切片进行获取,此处不需要使用.loc
frame['one':'two']
yearstatepopdebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN

4.3 使用.loc方法获取你想获取的所有

获取指定的行和列区域

df.loc[ 行名序列 , 列名序列 ]:获取指定的行序列和列序列的交集,就是把这个区域确定出来

  • 使用loc的时候左侧填写行序列,右侧填写列序列;

  • 此处序列的概念同上,可以是单个名称,也可是一个列表。

  • 只有行序列的时候,右侧可以省略

获取一行多列
frame.loc['one',['year','state']]
year     2000
state    Ohio
Name: one, dtype: object
获取多行多列
# 同时获取指定行和列
frame.loc[['one', 'two'],['year','state']]
yearstate
one2000Ohio
two2001Ohio
获取指定的列区域

df.loc[:,列序列],此处的 冒号:,可以理解为切片的含义,即获取所有的行,同时指定列

frame.loc[:, 'year']
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64

4.4 切片的妙用

我们可以指定行和列切片的起点和终点,左闭右闭区间;

下面代码可以理解为,行从名称为’two’的行开始,一直到最后;列从名称为’year’的列开始一直到最后。

frame.loc['two': , "year":]
yearstatepopdebt
two2001Ohio1.7NaN
three2002Ohio3.6NaN
four2001Nevada2.4NaN
five2002Nevada2.9NaN
six2003Nevada3.2NaN

当然你完全可以指定他的终点

frame.loc['two':'five', 'year':'pop']
yearstatepop
two2001Ohio1.7
three2002Ohio3.6
four2001Nevada2.4
five2002Nevada2.9

5 整数索引 iloc[行索引序列,列索引序列]

iloc的使用和loc一致,只不过是将名称索引改为整数索引
整数索引就是使用行和列的下标(索引)进行获取

5.1 获取行

就像loc,只获取行的时候,列序列完全可以省略,反之则不行。

获取一行
# 获取第0行
frame.iloc[0]
year     2000
state    Ohio
pop       1.5
debt      NaN
Name: one, dtype: object
获取多行

frame.iloc[[0,1]]

yearstatepopdebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
使用切片获取,左闭右开
# 切片获取多行 左闭右开
frame.iloc[0:1]
yearstatepopdebt
one2000Ohio1.5NaN

5.2 获取列

只要将行切片获取全部即可

获取一列
frame.iloc[:, 1]
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
six      Nevada
Name: state, dtype: object
获取多列
frame.iloc[:, [1, 2]]
statepop
oneOhio1.5
twoOhio1.7
threeOhio3.6
fourNevada2.4
fiveNevada2.9
sixNevada3.2
使用切片获取多列
# 使用切片
frame.iloc[:, 1: 3]
statepop
oneOhio1.5
twoOhio1.7
threeOhio3.6
fourNevada2.4
fiveNevada2.9
sixNevada3.2

5.3 获取指定行和列范围

方法与loc完全一致,只是换了索引的方式

获取多行多列
frame.iloc[[2,3],[1,3]]
使用切片获取
### 获取指定行和列范围
frame.iloc[2:, 3:]
debt
threeNaN
fourNaN
fiveNaN
sixNaN

参考:

利用 Python 进行数据分析 · 第 2 版

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值