本文介绍: 参考书籍在线链接利用 Python 进行数据分析 · 第 2 版当你看完1-5的内容再来看这个表,用于以后的查询切片时,loc包含端点,左闭右闭;iloc包含结束点,左闭右开“:”表示行(列)切片的意思,行开始点:行结束点。当只获取行的时候,列可以省略当只获取列的时候,行不能省略可以写作loc[ : , 列索引],意思是所有行都选中 year state pop debt

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

2 获取行和列索引

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

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

3 常用的索引方式

首先我们明确两个概念

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

4.2 获取行 -> df.loc[]

获取一行
# 获取一行的的方法
frame.loc['one']
year     2000
state    Ohio
pop       1.5
debt      NaN
Name: one, dtype: object
获取多行
# 获取多行的方法
frame.loc[['one','two']]

使用切片进行获取,此处不需要使用.loc
frame['one':'two']

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']]
获取指定的列区域

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":]

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

frame.loc['two':'five', 'year':'pop']

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

使用切片获取,左闭右开
# 切片获取多行 左闭右开
frame.iloc[0:1]

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]]
使用切片获取多列
# 使用切片
frame.iloc[:, 1: 3]

5.3 获取指定行和列范围

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

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

参考

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注