1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > pandas库Series使用和ix loc iloc基础用法

pandas库Series使用和ix loc iloc基础用法

时间:2019-08-10 08:19:46

相关推荐

pandas库Series使用和ix loc iloc基础用法

1. pandas库Series基础用法:

直接贴出用例:

1. 构造/初始化Series的3种方法:

(1)用列表list构建Series

import pandas as pdmy_list=[7,'Beijing','19大',3.1415,-10000,'Happy']s=pd.Series(my_list)print(type(s))print(s)

<class 'pandas.core.series.Series'>0 71Beijing2 19大33.14154-100005 Happydtype: object

pandas会默认用0到n来做Series的index,但是我们也可以自己指定index,index可以理解为dict里面的key

s=pd.Series([7,'Beijing','19大',3.1415,-10000,'Happy'],index=['A','B','C','D','E','F'])print(s)

A 7BBeijingC 19大D3.1415E-10000F Happydtype: object

(2)用字典dict来构建Series,因为Series本身其实就是key-value的结构

cities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')print(apts)

Beijing55000.0Guangzhou 45000.0Hangzhou20000.0Shanghai60000.0Suzhou NaNshenzhen50000.0Name: income, dtype: float64

(3)用numpy array来构建Series

import numpy as npd=pd.Series(np.random.randn(5),index=['a','b','c','d','e'])print(d)

a -0.329401b -0.435921c -0.232267d -0.846713e -0.406585dtype: float64

以上还是比较容易理解的。

2. Series选择数据

(1)可以像对待一个list一样对待一个Series,完成各种切片的操作

import pandas as pdcities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')print('apts:\n',apts)print('apts[3]:\n',apts[3])print('apts[[3,4,1]]:\n',apts[[3,4,1]])print('apts[:-1]:\n',apts[:-1])print('apts[1:]+apts[:-1]:\n',apts[1:]+apts[:-1])

apts:Beijing55000.0Shanghai60000.0shenzhen50000.0Hangzhou20000.0Guangzhou 45000.0Suzhou NaNName: income, dtype: float64apts[3]:20000.0apts[[3,4,1]]:Hangzhou20000.0Guangzhou 45000.0Shanghai60000.0Name: income, dtype: float64apts[:-1]:Beijing55000.0Shanghai60000.0shenzhen50000.0Hangzhou20000.0Guangzhou 45000.0Name: income, dtype: float64apts[1:]+apts[:-1]:Beijing NaNGuangzhou90000.0Hangzhou40000.0Shanghai120000.0Suzhou NaNshenzhen100000.0Name: income, dtype: float64

(2)Series可以用来选择数据

import pandas as pdcities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')print(apts['Shanghai'])print('Hangzhou' in apts)print('Choingqing' in apts)

60000.0TrueFalse

(3)和numpy很像,可以使用numpy的各种函数mean,median,max,min

import pandas as pdcities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')less_than_50000=(apts<=50000) print(apts[less_than_50000])print(apts.mean())

Guangzhou 45000.0Hangzhou20000.0shenzhen50000.0Name: income, dtype: float6446000.0

3. Series元素赋值

直接利用索引值赋值,boolean indexing,在赋值里它也可以用

import pandas as pdcities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')print(apts)print('Old income of shenzhen:{}'.format(apts['shenzhen']))apts['shenzhen']=70000 print('New income of shenzhen:{}'.format(apts['shenzhen']),'\n')less_than_50000=(apts<50000) print(less_than_50000)apts[less_than_50000]=40000 print(apts)

Beijing55000.0Shanghai60000.0shenzhen50000.0Hangzhou20000.0Guangzhou 45000.0Suzhou NaNName: income, dtype: float64Old income of shenzhen:50000.0 New income of shenzhen:70000.0 BeijingFalseShanghaiFalseshenzhenFalseHangzhouTrueGuangzhouTrueSuzhou FalseName: income, dtype: boolBeijing55000.0Shanghai60000.0shenzhen70000.0Hangzhou40000.0Guangzhou 40000.0Suzhou NaNName: income, dtype: float64

4. Series数据缺失的简单应用

cities={'Beijing':55000,'Shanghai':60000,'shenzhen':50000,'Hangzhou':20000,'Guangzhou':45000,'Suzhou':None}apts=pd.Series(cities,name='income')apts['shenzhen']=70000less_than_50000=(apts<50000)apts[less_than_50000]=40000print('apts:\n',apts,'\n')print(apts.notnull()) # boolean条件print(apts.isnull())print(apts[apts.isnull()]) #利用缺失索引布尔值取元素apts2=pd.Series({'Beijing':10000,'Shanghai':8000,'shenzhen':6000,'Tianjin':40000,'Guangzhou':7000,'Chongqing':30000})print('apts2:\n',apts2)apts3=apts+apts2 #索引缺失相加print('apts3:\n',apts3)apts3[apts3.isnull()]=300 #将缺失位置赋值为中值print(apts3)

apts:Beijing55000.0Shanghai60000.0shenzhen70000.0Hangzhou40000.0Guangzhou 40000.0Suzhou NaNName: income, dtype: float64 Beijing TrueShanghaiTrueshenzhenTrueHangzhouTrueGuangzhouTrueSuzhou FalseName: income, dtype: boolBeijingFalseShanghaiFalseshenzhenFalseHangzhouFalseGuangzhou FalseSuzhou TrueName: income, dtype: boolSuzhou NaNName: income, dtype: float64apts2:Beijing10000Shanghai8000shenzhen6000Tianjin40000Guangzhou7000Chongqing 30000dtype: int64apts3:Beijing65000.0Chongqing NaNGuangzhou 47000.0Hangzhou NaNShanghai68000.0Suzhou NaNTianjinNaNshenzhen76000.0dtype: float64Beijing65000.0Chongqing300.0Guangzhou 47000.0Hangzhou 300.0Shanghai68000.0Suzhou 300.0Tianjin 300.0shenzhen76000.0dtype: float64

2. Pandas中ix,loc,iloc的区别

import pandas as pdimport numpy as npdata = pd.Series(np.arange(10), index=[49,48,47,46,45, 1, 2, 3, 4, 5])print('data:\n',data,'\n')print('data.iloc[:3]:\n',data.iloc[:3],'\n')print('data.loc[:3]:\n',data.loc[:3],'\n')print('data.ix[:3]:\n',data.ix[:3],'\n')

data:49 048 147 246 345 41526374859dtype: int64 data.iloc[:3]:49 048 147 2dtype: int64 data.loc[:3]:49 048 147 246 345 4152637dtype: int64 data.ix[:3]:49 048 147 246 345 4152637dtype: int64

loc:在index的标签上进行索引(即是在index上寻找相应的标签,不是下标),范围包括start和end。

iloc:在index的位置上进行索引(即是按照普通的下标寻找),不包括end.

ix:先在index的标签上索引,索引不到就在index的位置上索引(如果index非全整数),不包括end。

为了避免歧义,建议优先选择loc和iloc

>>> data = pd.Series(np.arange(10), index=[49,48,47,46,45, 1, 2, 3, 4, 5])>>> data49 048 147 246 345 41526374859>>> data.iloc[:6] # 从下标0开始,不包括下标为6的标签49 048 147 246 345 415dtype: int64>>> data.loc[:6] # 因为index里面不包含标签6,所以报错......KeyError: 6>>> data.ix[:6] # 因为index里面不包含标签6,index都是整数,并不是非全整数的情况......KeyError: 6>>> data= pd.Series(np.arange(10), index=['a','b','c','d','e', 1, 2, 3, 4, 5])>>> dataa 0b 1c 2d 3e 41 52 63 74 85 9dtype: int64>>> data.ix[:6] # 这里不会报错,因为index的标签是非全整数a 0b 1c 2d 3e 41 5dtype: int64>>> data.loc[:6]TypeError: cannot do slice indexing

这里算是一个pandas的语法笔记。。

参考:

/cymy001/article/details/78268721

/zeroder/article/details/54319021

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。