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

Pandas行和列的获取

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

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

0 查看手册

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

功能
获取列 df.loc[: , 列名序列] df.iloc[ : , 列索引序列] df[列名序列]
获取行 df.loc[行名序列] df.iloc[ 行索引序列] df[行名:列名]
获取行和列1 df.loc[行名序列,列名序列] df.iloc[ 行索引序列,列索引序列]
获取行和列2 df.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
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
six 2003 Nevada 3.2 NaN

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']]
year state
one 2000 Ohio
two 2001 Ohio
three 2002 Ohio
four 2001 Nevada
five 2002 Nevada
six 2003 Nevada

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']]

year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
使用切片进行获取,此处不需要使用.loc
frame['one':'two']
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN

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']]
year state
one 2000 Ohio
two 2001 Ohio
获取指定的列区域

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":]
year state pop debt
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
six 2003 Nevada 3.2 NaN

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

frame.loc['two':'five', 'year':'pop']
year state pop
two 2001 Ohio 1.7
three 2002 Ohio 3.6
four 2001 Nevada 2.4
five 2002 Nevada 2.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]]

year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
使用切片获取,左闭右开
# 切片获取多行 左闭右开
frame.iloc[0:1]
year state pop debt
one 2000 Ohio 1.5 NaN

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]]
state pop
one Ohio 1.5
two Ohio 1.7
three Ohio 3.6
four Nevada 2.4
five Nevada 2.9
six Nevada 3.2
使用切片获取多列
# 使用切片
frame.iloc[:, 1: 3]
state pop
one Ohio 1.5
two Ohio 1.7
three Ohio 3.6
four Nevada 2.4
five Nevada 2.9
six Nevada 3.2

5.3 获取指定行和列范围

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

获取多行多列
frame.iloc[[2,3],[1,3]]
使用切片获取
### 获取指定行和列范围
frame.iloc[2:, 3:]
debt
three NaN
four NaN
five NaN
six NaN

参考:

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

你可能感兴趣的:(Python,库/函数使用,pandas,python,数据分析)