数据处理,是数据分析、数据模型成败的关键环节。娴熟简洁的数据处理技巧,是提高建模效率和建模质量的必要能力。

今天给大家总结下Pandas的使用方法,方便大家,也方便自己查阅。

一、Pandas索引概述

很多人在使用Pandas处理数据时,总会迷失在data[]、iloc()、loc()、ix()中,似乎记得,又似乎不记得,每到用时都需要百度,不知所以然的解决了问题,下次继续百度,记忆点基本上非常混乱。总结本文,希望能解决这个问题,通过一个简单的案例彻底搞明白这几种索引方法到底有什么区别。

日常使用中,推荐使用loc和iloc进行索引,loc是指location的意思,iloc中的 i 是指integer,这两个方法容易混淆,可以使用特殊方式来加强记忆。

**iloc:基于位置,用行号、列号****进行索引,**i 可以看着 int,因此 iloc 只能用整数 来索引,例如data.iloc[0:2,:]

**loc :基于标签,用行名、列名****进行索引,**数据的index经常为整数,因此 loc 的使用范围要远高于iloc,loc可以使用整数切片、名称(index,columns)索引、也可以切片和名称混合使用。例如:data.loc[0:5:,‘row1’:‘row2’]

我们简单构造一个数据集,在下面的案例中需要用到。

import pandas as pd
import numpy  as np
data = pd.DataFrame(np.arange(25).reshape(5, 5), 
                  index = ['row1', 'row2','row3','row4','row5'], 
                  columns=['col1', 'col2','col3','col4','col5'])
data 
      col1  col2  col3  col4  col5
row1     0     1     2     3     4
row2     5     6     7     8     9
row3    10    11    12    13    14
row4    15    16    17    18    19
row5    20    21    22    23    24

创建的表格数据如下:

python 中iloc函数 python中iloc的详细用法_多列

二、直接用列名索引

取一列: data[‘col1’] ,即取得第一列,得到的是一个Series对象。

取多列: data[[‘col1’,‘col2’]] ,即取得第一列、第二列,得到的是一个DataFrame对象。

注 意:用data[‘row1’] 、data[0]、data[:,0]、data[0,:]、data[:,‘col1’:‘col2’] 统统都会报错的,这类命令只能用来按列名取一列或多列

data['col1']
row1     0
row2     5
row3    10
row4    15
row5    20

python 中iloc函数 python中iloc的详细用法_python_02

data[['col1','col2']] 
      col1  col2
row1     0     1
row2     5     6
row3    10    11
row4    15    16
row5    20    21

#下面的命令直接应用都会报错,但是用loc 和 iloc 就不会报错
data['row1']
data[0]
data[:,0]
data[0,:]
data[:,'col1':'col2'] 
#TypeError: '(slice(None, None, None), 0)' is an invalid ke

python 中iloc函数 python中iloc的详细用法_python 中iloc函数_03

三、直接用行号索引

data[0:2] 代表取得第0行和第1行,不包含最后一个。

注 意: 只取一行的话,要用data[0:1],不能用data[0],data[0:2,]也会报错

data[0:2]
      col1  col2  col3  col4  col5
row1     0     1     2     3     4
row2     5     6     7     8     9

python 中iloc函数 python中iloc的详细用法_python 中iloc函数_04

四、iloc按行号、列号索引

官方:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html

1、行索引

1)取一行 : data.iloc[0] 、data.iloc[0,:]

2)取多行 : data.iloc[[0,2]] 、data.iloc[[0,2],:]

3)取连续多行 : data.iloc[0:2] 、data.iloc[0:2,:]

2、列索引

4)取一列 : data.iloc[:,0]

5)取多列 : data.iloc[:,[0,2]]、data.iloc[:,[0,2]]

6)取连续多列 :data.iloc[:,0:2]

注 意:

取行的时候可以不提列,也可以用 “,:” 来指全列

取列的时候必须用":,"来指定全行。

可以使用一个数字来代表一个,可以使用一个列表[a,b]代表多个,也可以使用a:b代表连续多个。

data.iloc[0]
col1    0
col2    1
col3    2
col4    3
col5    4

python 中iloc函数 python中iloc的详细用法_python 中iloc函数_05

data.iloc[:,2:4]
      col3  col4
row1     2     3
row2     7     8
row3    12    13
row4    17    18
row5    22    23

python 中iloc函数 python中iloc的详细用法_数据挖掘_06

data.iloc[:,[2,4]]
      col3  col5
row1     2     4
row2     7     9
row3    12    14
row4    17    19
row5    22    24

python 中iloc函数 python中iloc的详细用法_多列_07

五、loc按行名、列名索引

官方网址:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html

1、行索引

取一行: data.loc[‘row1’] 、data.loc[‘row1’,:]

取多行: data.loc[[‘row1’,‘row2’]] 、data.loc[[‘row1’,‘row2’],:]

取连续多行: data.loc[‘row1’:‘row2’] 、data.loc[‘row1’:‘row2’,:]

2、列索引

取一列: data.loc[:,‘col1’]

取多列: data.loc[:,[‘row1’,‘row2’]]

取连续多列: data.loc[:,‘row1’:‘row2’]

注 意:

取行的时候可以不提列,也可以用",:"来指全列。

取列的时候必须用":,"来指定全行。

可以使用一个数字来代表一个,可以使用一个list [‘a’,‘b’]代表多个,也可以使用’a’:'b’代表连续多个。

data.loc[:,'col1':'col3'] 
      col1  col2  col3
row1     0     1     2
row2     5     6     7
row3    10    11    12
row4    15    16    17
row5    20    21    22

python 中iloc函数 python中iloc的详细用法_多列_08

data.loc[:,['col1','col3']]
      col1  col3
row1     0     2
row2     5     7
row3    10    12
row4    15    17
row5    20    22

python 中iloc函数 python中iloc的详细用法_python_09

#当索引为整数时,可以用整数进行索引
data = pd.DataFrame(np.arange(25).reshape(5, 5), 
                  columns=['col1', 'col2','col3','col4', 'col5'])
   col1  col2  col3  col4  col5
0     0     1     2     3     4
1     5     6     7     8     9
2    10    11    12    13    14
3    15    16    17    18    19
4    20    21    22    23    24

data.loc[0:3,'col1':'col3'] 
   col1  col2  col3
0     0     1     2
1     5     6     7
2    10    11    12
3    15    16    17

python 中iloc函数 python中iloc的详细用法_python 中iloc函数_10

六、使用iat和at

iat 和 at 只能取单个元素,iat 使用行、列索引,at 使用行、列名,但是其功能被 iloc 和 loc 包含,因此不推荐。

data.iat[1,2] 
7

python 中iloc函数 python中iloc的详细用法_python 中iloc函数_11

data.at['row4','col4'] 
18

python 中iloc函数 python中iloc的详细用法_数据挖掘_12

七、最后总结(重点!!!!)

正常情况下,推荐使用 iloc 和 loc。最核心的点记住,取行可以不提列,取列必须提行,可以用一个数字,一个list,或者一个区间来取行列。ix新版的已经弃用了,所以可以不用太关注。