本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-07(10)

2020-08(50)

Python:pandas中loc、iloc用法(ix即将弃用)

发布于2020-07-25 22:21     阅读(1557)     评论(0)     点赞(20)     收藏(5)



Python:pandas中loc、iloc用法(ix即将弃用)

这篇文章简单介绍下pandaslocilocix的用法

loc:通过行标签索引数据
iloc:通过行号索引行数据
ix: 通过行标签或行号索引数据(loc和iloc的混合)

创建DataFrame对象

data_dic = { 'a':[1,2,3,4,5,6,7,8],'b':[9,10,11,12,13,14,15,16],
'c':[17,18,19,20,21,22,23,24]   
}
index = ['x1','x2','x3','x4','x5','x6','x7','x8']
data_df = DataFrame(data_dic,index=index)
data_df

output:
	a	b	c
x1	1	9	17
x2	2	10	18
x3	3	11	19
x4	4	12	20
x5	5	13	21
x6	6	14	22
x7	7	15	23
x8	8	16	24

loc

1. loc就是通过行标签(x1, x2 … x8)来索引行数据的
注意: 提取出来的行数据是Series类型

data_df.loc['x1'] #索引单行数据 Series类型
#如果想提取出DataFrame类型可用data_df.loc[['x1']]
output:
a     1
b     9
c    17
Name: x1, dtype: int64

可以看到第一行的数据被索引了出来:1,9,17
当然也可以通过loc得到具体的数据

data_df.loc['x1','a']  #第1行,第1列的数据
output:1

data_df.loc['x1','b'] #第1行,第2列的数据
output: 9

2. 还可以利用loc进行多行索引
如:想要得到 x2-x4 这三行的数据

data_df.loc['x2':'x4']

output:
    a	b	c
x2	2	10	18
x3	3	11	19
x4	4	12	20

同理,如果想要得到x2-x4这三行中a列和b列的数据

data_df.loc['x2':'x4', ['a','b']] 
或者
data_df.loc['x2':'x4', :'b'] 

output:
    a	b
x2	2	10
x3	3	11
x4	4	12

不知道标签的情况下就得用iloc来索引了

iloc

1. iloc用行号来索引行数据
与上文的loc作类比
想要得到第一行的数据
注意: 提取出来的行数据是Series类型

data_df.iloc[0]
#如果想提取出DataFrame类型可用data_df.iloc[[0]]
output:
a     1
b     9
c    17
Name: x1, dtype: int64

对于单个数据的索引也和loc不同

data_df.iloc[0,0]   #第1行,第1列数据
output: 1

data_df.iloc[4,2]  #第5行,第3列数据
output: 21

2. iloc多行索引
想要得到x2-x4这三行的数据

data_df.iloc[1:4]

output:
	a	b	c
x2	2	10	18
x3	3	11	19
x4	4	12	20

想要得到x2-x4这三行中a列和b列的数据

data_df.iloc[1:4,:2]
或者
data_df.iloc[1:4,[0,1]]

output:
    a	b
x2	2	10
x3	3	11
x4	4	12

单独将c列的数据提取出来

c1 = data_df.iloc[:,[2]]  #c1为DataFrame类型
c2 = data_df.iloc[:,2]    #c2为Series类型

上面的代码中,c1c2都可以提出c列的数据,但是c1提取出来的类型是DataFrame类型,c2提取出来的类型是Series类型,在实际运用中,可以根据需求选择提取的类型。

将b、c两列中x4-x8行提取出来

data_df.iloc[3:,1:]

output:
	 b	c
x4	12	20
x5	13	21
x6	14	22
x7	15	23
x8	16	24

ix

ix是loc和iloc的混合,既可以根据行标签也可以根据行号来索引
如果想要得到第一行的数据

data_df.ix[['x1']]
或者
data_df.ix[[0]]

output:
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:19: FutureWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#ix-indexer-is-deprecated
    a	b	c
x1	1	9	17

Python未来将弃用ix,因此推荐loc和iloc

最后再次强调:
loc:通过行标签索引数据
iloc:通过行号索引行数据
不能混淆了!!!!
错误示范:

data_df.loc[[1]]  #loc方法中用行号索引  错误!!!
output:KeyError: "None of [Int64Index([1], dtype='int64')] are in the [index]"

data_df.iloc[['x2']]  #iloc方法中用行标签索引   错误!!!!
output:ValueError: invalid literal for int() with base 10: 'x2'

原文链接:https://blog.csdn.net/qq_41913559/article/details/107561309






所属网站分类: 技术文章 > 博客

作者:丸子

链接:https://www.pythonheidong.com/blog/article/463836/4fd231c152cee2c4dcea/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)