Python3.5 Pandas模块中Series用法实例

本文实例讲述了Python3.5 Pandas模块之Series用法。分享给大家供大家参考,具体如下:

1、Pandas模块引入与基本数据结构

2、Series的创建

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author:ZhengzhengLiu

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#1.Series通过numpy一维数组创建

print("=========Series通过numpy一维数组创建==========")

arr = np.array([1,2,3,4,5])

s1 = pd.Series(arr)

print(s1)

print(s1.index)

print(s1.values)

#2.Series直接通过一维数组创建

print("=========Series直接通过一维数组创建==========")

s2 = pd.Series([10.5,20,38,40])

print(s2)

#修改索引值

s2.index = ['a','b','c','d']

print(s2)

#Series通过一维数组创建,可以在创建的同时自定义索引值,

# 也可以之后通过赋值的形式去修改

print("=========Series创建的同时自定义索引值和数据类型==========")

s3 = pd.Series(data=[89,78,90,87],dtype=np.float64,

index=['语文','数学','英语','科学'])

print(s3)

#3.Series通过字典创建,字典的键对应索引,值对应数据

print("=========Series通过字典创建==========")

dict = {'a':1,'b':2,"c":3,"d":4}

s4 = pd.Series(dict)

print(s4)

运行结果:

=========Series通过numpy一维数组创建==========

0 1

1 2

2 3

3 4

4 5

dtype: int32

RangeIndex(start=0, stop=5, step=1)

[1 2 3 4 5]

=========Series直接通过一维数组创建==========

0 10.5

1 20.0

2 38.0

3 40.0

dtype: float64

a 10.5

b 20.0

c 38.0

d 40.0

dtype: float64

=========Series创建的同时自定义索引值和数据类型==========

语文 89.0

数学 78.0

英语 90.0

科学 87.0

dtype: float64

=========Series通过字典创建==========

a 1

b 2

c 3

d 4

dtype: int64

3、Series值的获取

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#4.Series值的获取

print("=========Series值的获取==========")

s2 = pd.Series([10.5,20,38,40])

#修改索引值

s2.index = ['a','b','c','d']

print(s2)

print(s2[0]) #方括号+下标值的形式获取Series值

print(s2["a"]) #方括号+索引的形式获取Series值

运行结果:

=========Series值的获取==========

a 10.5

b 20.0

c 38.0

d 40.0

dtype: float64

10.5

10.5

4、Series运算

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#5.Series值的运算

#Series中元素级别的运算结果,包含索引值并且键值关系保持不变

print("=========Series值的运算==========")

s6 = pd.Series({'a':1,'b':2,"c":3,"d":4})

print(s6)

print("=========打印Series大于2的值==========")

print(s6[s6>2])

print("=========打印Series的值除以2==========")

print(s6/2)

#numpy中的通用函数在Series中也支持

s7= pd.Series([1,2,-3,-4])

print(np.exp(s7))

运行结果:

=========Series值的运算==========

a 1

b 2

c 3

d 4

dtype: int64

=========打印Series大于2的值==========

c 3

d 4

dtype: int64

=========打印Series的值除以2==========

a 0.5

b 1.0

c 1.5

d 2.0

dtype: float64

0 2.718282

1 7.389056

2 0.049787

3 0.018316

dtype: float64

5、Series缺失值检验

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#6.Series缺失值检验

scores = Series({"a":88,"b":79,"c":98,"d":100})

print(scores)

new = ["a","b","e","c","d"]

scores = Series(scores,index=new)

print(scores)

print("======过滤出为缺失值的项=======")

print(scores.isnull()) #NAN值返回True

#print(pd.isnull(scores)) #与上面一句等价

print("======过滤出为非缺失值的项=======")

print(pd.notnull(scores)) #非NAN值返回True

运行结果:

a 88

b 79

c 98

d 100

dtype: int64

a 88.0

b 79.0

e NaN

c 98.0

d 100.0

dtype: float64

======过滤出为缺失值的项=======

a False

b False

e True

c False

d False

dtype: bool

======过滤出为非缺失值的项=======

a True

b True

e False

c True

d True

dtype: bool

6、Series自动对齐

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#7.Series自动对齐

s8 = Series([12,28,46],index=["p1","p2","p3"])

s9 = Series([2,4,6,8],index=["p2","p3","p4","p5"])

print("=======s8=======")

print(s8)

print("=======s9=======")

print(s9)

print("=======s8+s9=======")

print(s8+s9)

运行结果:

=======s8=======

p1 12

p2 28

p3 46

dtype: int64

=======s9=======

p2 2

p3 4

p4 6

p5 8

dtype: int64

=======s8+s9=======

p1 NaN

p2 30.0

p3 50.0

p4 NaN

p5 NaN

dtype: float64

7、Series及其索引的name属性

#模块引入

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

#8.Series及其name属性

s10 = Series({"jack":18,"amy":20,"lili":23,"susan":15})

print(s10)

print("=======设置name属性后=======")

s10.name = "年龄" #数据名称标签

s10.index.name = "姓名" #索引名称标签

print(s10)

运行结果:

amy 20

jack 18

lili 23

susan 15

dtype: int64

=======设置name属性后=======

姓名

amy 20

jack 18

lili 23

susan 15

Name: 年龄, dtype: int64

对pandas中两种数据类型Series和DataFrame的区别详解

1. Series相当于数组numpy.array类似

s1=pd.Series([1,2,4,6,7,2])

s2=pd.Series([4,3,1,57,8],index=['a','b','c','d','e'])

print s2

obj1=s2.values

# print obj1

obj2=s2.index

# print obj2

# print s2[s2>4]

# print s2['b']

1.Series 它是有索引,如果我们未指定索引,则是以数字自动生成。

下面是一些例子:

obj=Series([4,7,-5,3])

print obj

#输出结果如下:

# 0 4

# 1 7

# 2 -5

# 3 3

print obj.values #取出它的值

#[ 4 7 -5 3]

print obj.index #取出索引值

#输出结果如下:

# RangeIndex(start=0, stop=4, step=1)

obj2=Series([4,7,-5,3],index=['d','b','a','c'])

print obj2

#输出结果如下:

# d 4

# b 7

# a -5

# c 3

#可以通过索引的方式选择Series中的单个或一组值

print obj2['a'] #输出结果:-5

print obj2['d'] #输出结是:4

2. Series的一些操作

Series.order()进行排序,而DataFrame则用sort或者sort_index

print ratings_by_title.order(ascending=False)[:10]

(1)Numpy数组运算(根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接

print obj2[obj2>0] #取出>0的值

#输出结果如下:

# d 4

# b 7

# c 3

print obj2*2

#输出结果如下:

# d 8

# b 14

# a -10

# c 6

(2)还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。它可以用在许多原来需要字典参数的函数中。

print 'b' in obj2 #obj2中有索引'b'?若有就返回'True'

(3)如果数据被存在一个python字典中,也可以直接通过这个字典来创建Series.

sdata={'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}

obj3=Series(sdata)

print obj3

#输出结果如下:

# Ohio 35000

# Oregon 16000

# Texax 71000

# Utah 5000

#注:如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

states=['California','Ohio','Oregon','Texax']

obj4=Series(sdata,index=states) #将sdata字典创建Series,索引用states来创建

print obj4

#California在sdata中没有相应的值,故是NaN缺省值

# California NaN

# Ohio 35000.0

# Oregon 16000.0

# Texax 71000.0

(4)pandas中的isnull和notnull函数可以用于检测缺失数据,Series也有类似的方法

print pd.isnull(obj4)

#输出结果如下:

# California True

# Ohio False

# Oregon False

# Texax False

# dtype: bool

print pd.notnull(obj4)

#输出结果如下:

# California False

# Ohio True

# Oregon True

# Texax True

# dtype: bool

print obj4.isnull() #Series的isnull方法

#输出结果如下:

# California True

# Ohio False

# Oregon False

# Texax False

# dtype: bool

(5)Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。

print obj3,obj4

# Ohio 35000

# Oregon 16000

# Texax 71000

# Utah 5000

# dtype: int64

#

# California NaN

# Ohio 35000.0

# Oregon 16000.0

# Texax 71000.0

# dtype: float64

print obj3+obj4

# California NaN

# Ohio 70000.0

# Oregon 32000.0

# Texax 142000.0

# Utah NaN

# dtype: float64

(6)Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切

obj4.name='population'

obj4.index.name='state'

print obj4

#输出如下:加上state和name

# state

# California NaN

# Ohio 35000.0

# Oregon 16000.0

# Texax 71000.0

# Name: population, dtype: float64

(7)Series的索引可以通过赋值的方式就地修改

obj2.index=['Bob','Steven','Jeff','Ryan']

print obj2

#输出结果如下:

# Bob 4

# Steven 7

# Jeff -5

# Ryan 3

# dtype: int64

obj2['Bob']=15

print obj2

#输出结果如下:

# Bob 15

# Steven 7

# Jeff -5

# Ryan 3

# dtype: int64

print obj2['Bob'].values #没有这种表示法,报错。因为类似字典取值,直接取键值即可

print obj2.values #查看所有值

3. DataFrame相当于有表格,有行表头和列表头

a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))

print a

4.DataFrame的一些操作

#增加列或修改列

a['f']=[1,2,3,4]

a['e']=10

print a

print "======================="

#增加行或修改行

a.ix['D']=10

# print a

S=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))

a=a.append(S)

print a

print "======================="

#切片

print (a[['b','e']]) #取'b','e'列

print a.loc['A':'D',['a','c','f']] #取'A'-'D'行'a','c','f'列

print "======================="

#减少行或减少列

a=a.drop(['C','D']) #删除'C'行和'D'

print a

a=a.drop('a',axis=1) #删除'a'列,axis=0表示行,axis=1表示列

print a

print "======================="

#缺省值处理

a.iloc[2,3]=None #取第三行第4列值设为None

a.iloc[4,0]=None #取第五行第1列值设为None

print a

a=a.fillna(5) #缺省值处(即NaN处填充为5)

print a

#缺省值去行即有缺省值的把这一行都去掉

a.iloc[2,3]=None

a.iloc[4,0]=None

print a

a=a.dropna() #删除缺省值为NaN的行

print a

print "======================="

#读取excel,适当改动后,保存到excel中

e1=pd.read_excel('test.xlsx',sheetname='Sheet1')

e1.columns=['class','no','name','sex','dormitory','phonenumber']

print(e1)

print(e1.ix[2])

print(e1['class'])

print(e1.sex)

#可将取出的数据处理,处理完后再保存到excel中去

e2=pd.read_excel('test_copy.xlsx',sheetname='Sheet1',names='table1',header=None)

e2.columns=['a','b','c','d']

print(e2)

e2.to_excel('test_write.xlsx',header=False,index=False)

(1)构建DataFrame 的方法很多,最常用的一种是直接传入一个由等长列表或者Numpy数组组成的字典

import numpy as np

from numpy import random

import matplotlib.pyplot as plt

from numpy.linalg import inv,qr

from pandas import Series,DataFrame

import pandas as pd

data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],

'year':[2000,2001,2002,2001,2002],

'pop':[1.5,1.7,3.6,2.4,2.9]}

frame=DataFrame(data)

print frame

#输出的结果如下:

# pop state year

# 0 1.5 Ohio 2000

# 1 1.7 Ohio 2001

# 2 3.6 Ohio 2002

# 3 2.4 Nevada 2001

# 4 2.9 Nevada 2002

(2)如果指定了列序列,则DataFrame的列就会按照指定的顺序进行排序

frame1=DataFrame(data,columns=['year','state','pop'])

print frame1

#输出的结果如下:

# year state pop

# 0 2000 Ohio 1.5

# 1 2001 Ohio 1.7

# 2 2002 Ohio 3.6

# 3 2001 Nevada 2.4

# 4 2002 Nevada 2.9

(3)跟Series一样,如果传入的列在数据中找不到,就会产生NA值

frame2=DataFrame(data,columns=['year','state','pop','debt'],

index=['one','two','three','four','five']) #column列的索引,index是行的索引

print frame2

#输出的结果如下:

# 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

print frame2.columns #输出列的索引

#输出结果如下:

# Index([u'year', u'state', u'pop', u'debt'], dtype='object')

(4)类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series.

print frame2['state'] #取出列索引为state的列的数据

#输出结果如下:

# one Ohio

# two Ohio

# three Ohio

# four Nevada

# five Nevada

# Name: state, dtype: object

print frame2.year

#输出结果如下:

# one 2000

# two 2001

# three 2002

# four 2001

# five 2002

# Name: year, dtype: int64

(5)返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。行也可以通过位置或名称的方式进行获取

比如用索引字段ix,ix是取行的索引

print frame2.ix['three']

#输出的结果如下:

# year 2002

# state Ohio

# pop 3.6

# debt NaN

# Name: three, dtype: object

(6)可以通过赋值的方式进行修改。

# frame2['debt']=16.5 #debt列全为16.5

# print frame2

#输出结果如下:

# year state pop debt

# one 2000 Ohio 1.5 16.5

# two 2001 Ohio 1.7 16.5

# three 2002 Ohio 3.6 16.5

# four 2001 Nevada 2.4 16.5

# five 2002 Nevada 2.9 16.5

#将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。

#如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值。

frame2['debt']=np.arange(5.)

print frame2

#输出结果如下:

# year state pop debt

# one 2000 Ohio 1.5 0.0

# two 2001 Ohio 1.7 1.0

# three 2002 Ohio 3.6 2.0

# four 2001 Nevada 2.4 3.0

# five 2002 Nevada 2.9 4.0

#赋值一个Series

val=Series([-1.2,-1.5,-1.7],index=['two','four','five'])

frame2['debt']=val

print frame2

#输出结果如下:不在index中的索引的值都赋了Nan

# year state pop debt

# one 2000 Ohio 1.5 NaN

# two 2001 Ohio 1.7 -1.2

# three 2002 Ohio 3.6 NaN

# four 2001 Nevada 2.4 -1.5

# five 2002 Nevada 2.9 -1.7

#为不存在的列赋值会创建出一个新列。关键字del用于删除列。

frame2['eastern']=frame2.state=='Ohio' #没有eastern列,固会自动增加一列

#frame2.state=='Ohio'如果等于则返回True,否则返回False

print frame2

# year state pop debt eastern

# one 2000 Ohio 1.5 NaN True

# two 2001 Ohio 1.7 -1.2 True

# three 2002 Ohio 3.6 NaN True

# four 2001 Nevada 2.4 -1.5 False

# five 2002 Nevada 2.9 -1.7 False

del frame2['eastern'] #删除eastern列

print frame2

#返回结果如下:

# year state pop debt

# one 2000 Ohio 1.5 NaN

# two 2001 Ohio 1.7 -1.2

# three 2002 Ohio 3.6 NaN

# four 2001 Nevada 2.4 -1.5

# five 2002 Nevada 2.9 -1.7

print frame2.columns #查看frame2的列

#输出结果如下:Index([u'year', u'state', u'pop', u'debt'], dtype='object')

(7)另一种常见的数据形式是嵌套字典(也就是字典的字典)

pop={'Nevada':{2001:2.4,2002:2.9},

'Ohio':{2000:1.5,2001:1.7,2002:3.6}}

frame3=DataFrame(pop)

print frame3

#输出的结果如下:

# Nevada Ohio

# 2000 NaN 1.5

# 2001 2.4 1.7

# 2002 2.9 3.6

#可以对frame进行转置

print frame3.T

#输出结果如下:

# 2000 2001 2002

# Nevada NaN 2.4 2.9

# Ohio 1.5 1.7 3.6

print DataFrame(pop,index=[2001,2002,2003])

#输出结果如下:

# Nevada Ohio

# 2001 2.4 1.7

# 2002 2.9 3.6

# 2003 NaN NaN

pdata={'Ohio':frame3['Ohio'][:-1],

'Nevada':frame3['Nevada'][:2]}

print DataFrame(pdata)

#输出结果如下:

# Nevada Ohio

# 2000 NaN 1.5

# 2001 2.4 1.7

可以输入给DataFrame构造器的数据:

二维ndarray 数据矩阵,还可以传入行标和列标

由数组、列表或元组组成的字典 每个序列会变成DataFrame的一列,所有序列的长度必须相同

Numpy的结构化/记录数组 类似于“由数组组成的字典”

由Series组成的字典 每个Series会成为一列。如果没显式指定索引,由各Series的索引会被合

并成结果的行索引

由字典组成的字典 各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”

的情况一样

字典或Series的列表 各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame

的列标

由列表或元组组成的列表 类似于“二维ndarray”

另一个DataFrame 该DataFrame的索引将会被沿用,除非显式指定了其它索引

Numpy的MaskedArray 类似于"二维ndarray"的情况,只是掩码值在结果DataFrame会变成NA/缺失值

#如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来:

frame3.index.name='year';

frame3.columns.name='state'

print frame3

#输出结果如下:

# state Nevada Ohio

# year

# 2000 NaN 1.5

# 2001 2.4 1.7

# 2002 2.9 3.6

#跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据:

print frame3.values

# [[ nan 1.5]

# [ 2.4 1.7]

# [ 2.9 3.6]]

#如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型

print frame2.values

# [[2000 'Ohio' 1.5 nan]

# [2001 'Ohio' 1.7 -1.2]

# [2002 'Ohio' 3.6 nan]

# [2001 'Nevada' 2.4 -1.5]

# [2002 'Nevada' 2.9 -1.7]]

以上这篇对pandas中两种数据类型Series和DataFrame的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

python pandas模块_Python3.5 Pandas模块中Series用法详解相关推荐

  1. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  2. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  3. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  4. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

  5. pdo mysql limit_PHP mysql中limit用法详解(代码示例)

    在MySQL中,LIMIT子句与SELECT语句一起使用,以限制结果集中的行数.LIMIT子句接受一个或两个offset和count的参数.这两个参数的值都可以是零或正整数. offset:用于指定要 ...

  6. php 配置 error_reporting,PHP中error_reporting()用法详解 技术分享

    在php中error_reporting函数有什么作用? error_reporting([ int $level ] ) - 设置应该报告何种 PHP 错误. 该函数能够在运行时设置 error_r ...

  7. mysql increment_mysql中auto_increment用法详解

    在mysql中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,也就是会自动自增一个ID了,如现在是1下次会自动是2了,就这么简单,下面来看mysql中auto_increme ...

  8. c 语言中set的用法,C++中set用法详解

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  9. Oracle数据库之rownum,ORACLE数据库中Rownum用法详解

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(,& gt;=,=, ...

最新文章

  1. 图文说明如何使用T4在VS2008里生成代码
  2. c# automapper 使用
  3. java 新区 老区_优学院《土地资源学》答案在线查题2020高校邦《Java核心开发技术【实境编程】》章测试答案...
  4. boost Mutex
  5. e300氛围灯哪里调节_黑色的奔驰E300有了亚光膜的加持 一出场就惊艳四座
  6. 持有1000枚以上比特币的巨鲸地址数量有所下降
  7. 简单树匹配算法STM-理论篇
  8. 【以太坊开发】发币指南--基础篇
  9. 自定义控件:Flag标签
  10. 如何让你的app在后台被干掉后优雅的启动。
  11. c语言fprintf报错,C语言中printf,sprintf和fprintf的区别是什么
  12. 3万字报告拆解:硅谷寒冬,投资人还在哪些赛道烧钱?|我在硅谷看未来
  13. Introduction to modern cryptography 第二章阅读笔记
  14. C语言每日一练---移动数组中的零元素
  15. android 9.0 10.0 去掉音量键+Power键组合键的屏幕截图功能
  16. php后端上传文件,php实现文件上传方法_后端开发
  17. TM4C123系列ARM单片机开发入门介绍
  18. 加入域提示“不能访问网路位置” 的解决方法
  19. python常用进制转换
  20. 搭建环境,创建vue3+typescript+vuetify项目

热门文章

  1. 【半原创】将js和css文件装入localStorage加速程序执行
  2. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理
  3. HDU 2154:跳舞毯
  4. 昨天食物中毒,至今浑身酸痛
  5. PHP基础知识之文件加载
  6. Swift 2.2 最基本的多线程
  7. [17] 楼梯(Stairs)图形的生成算法
  8. 答应我,安装chromedriver,按照版本号,v70就安装v2.42,
  9. 7.1 XHTML的规范化
  10. Github上好的Android开源框架