blackclody

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 
1.课程简介
python数据分析和展示
掌握表示、清洗、统计和展示数据的能力
包括 numpy库 ndarray
Matplotlib库 pyplot
Pandas库 Series DataFrame类型
编程工具:
使用anacode IDE集成开发环境
需要理解和掌握如下工具的使用: conda, spyder, IPython
本课程的实例:
实例1:图像的手绘效果
实例2:引力波的绘制
实例3:房价趋势的关联因素分析
实例4:股票数据的趋势分析曲线
坐标系的绘制
饼图的绘制
直方图的绘制
极坐标图的绘制
散点图的绘制
2. Anaconda IDE的基本使用
开源免费
支持近800个第三方库
包含多个主流工具
适合数据计算领域开发
win/linux/OS X
包管理和环境管理工具 conda
conda: 一个工具,用于包管理和环境管理 ,其中:
包管理与pip类似,管理python的第三方库
环境管理能够允许用户使用不同版本python,并能灵活切换
anaconda:一个集合,包括conda,某版本的python,一批第三方库
conda将工具,第三方库,Python版本,conda都当作包,同等对待
win平台 cmd 执行 conda --version 获取conda版本
执行 conda update conda升级 conda

编程工具spyder
交互式编程环境 IPython: 是一个功能强大的交互式shell 适合用于进行交互式的数据可视化和GUI的相关应用
变量前或后增加?将显示一些通用信息和包括函数对应的源代码 
%run demo.py用于运行一个py程序
IPython的%魔术命令
常用命令说明
%magic显示所有的魔术命令
%histIPython命令的输入历史
%pdb异常发生后自动进行调试器
%reset删除当前命令空间中的全部变量或名称
%who显示IPython当前命令空间中已经定义的变量
%time statement给出代码的执行时间,statement表示一段代码
%timeit statement多次执行代码,计算综合平均执行时间
中国大学mooc平台在线开放课程  www.icourses.cn/imooc
3. numpy库入门
数据的维度
维度:一组数据的组织形式
一维数据:由对待关系的有序或无序数据构成,采用线性方式组织 数组,对应列表,数组和集合的概念
列表:数据类型可以不同
数组:数据类型相同
二维数据:由多个一维数据组成,是一维数据的组合形式
多维数据:由一维或二维数据在新的维度上的扩展形成的
高维数据:仅利用最基本的二元关系展示数据间的复杂结构
数据维度的python表示
数据维度是数据的组织形式
一维数据: 列表和集合类型  列表有序  集合无序
二维数据:列表类型
多维数据:列表类型
高维数据:字典类型或或JSON,XML和YAML格式
numpy的数据对象ndarray
numpy是一个开源的python科学计算基础库,包含:
  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅立叶变换、随机数生成等功能
numpy是Scipy,Pandas等数据处理或科学计算库的基础
numpy库的引用  import numpy as np 
ndarray和python自带列表的区别,如下面的例子所示
  1. import numpy as np
  2. def npSum():
  3. a = np.array([0,1,2,3,4,5])
  4. b = np.array([9,8,7,6,5,4])
  5. c = a**2 + b**3
  6. return c
  7. def pySum():
  8. a = [0,1,2,3,4,5]
  9. b = [9,8,7,6,5,4]
  10. c = []
  11. for i in range(len(a)):
  12. c.append(a[i]**2 + b[i]**3)
  13. return c
  14. print(npSum())
  15. print(pySum())
输出
[729 513 347 225 141  89]
[729, 513, 347, 225, 141, 89]
numpy中ndarray的优点:
  • ndarray对象可以去掉元素间运算所需的循环,便一维向量更像单个数据
  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间
ndarray是一个多维的数组对象,由两部分构成:
  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)
ndarray数据一般要求所有元素类型相同(同质),数据下标从0开始
ndarray实例
>>> a = np.array([[0,1,2,3,4],[9,8,7,6,5]]) # np.array()生成一个ndarray数组
>>> a
array([[0, 1, 2, 3, 4],
       [9, 8, 7, 6, 5]])
>>> print(a)#ndarray()输出成[]形式,元素由空格分割
[[0 1 2 3 4]
 [9 8 7 6 5]]
轴:保存数据的维度
秩:轴的数量
ndarray对象的属性
属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象尺度,对于 矩阵,n行m列
.sizendarray对象元素的个数,相当于.shape中的n*m的值
.dtypendarray对象的元素类型
.itemsizendarray对象中每个元素的大小,以字节为单位
>>> a.ndim
2
>>> a.shape
(2, 5)
>>> a.size
10
>>> a.dtype
dtype('int32')
>>> a.itemsize
4

ndarray数组的元素类型


数据类型说明
bool布尔类型,True或False
intc与C语言中int类型一致,一般是int32或int64
intp用于索引的整数,与C语言中ssize_t一致,int32或int64
int8字节长度的整数,取值:[-128,127]
int1616位长度的整数,取值:[-32768,32767]
int3232位长度的整数,取值:[-231,231-1]
int6464位长度的整数,取值:[-263,263-1]
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,232-1]
uint6464位无符号整数,取值:[0,264-1]
float1616位半精度浮点数
float3232位半精度浮点数
float6464位半精度浮点数
complex64复数类型,实部和虚部都是32位的浮点数
complex128复数类型,实部和虚部都是64位的浮点数
ndarray数组的创建方法
  1. 从python的列表、元组等类型创建ndarray数组,如 x = np.array(list/tuple)  x = np.array(list/tuple,dytpe = np.float32
  2. 使用numpy中函数创建ndarray数组,如arange,ones,zeros等


函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape)根据shape生成一个全1的数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素都是val
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1的数组
np.zeros_like(a)根据数据a的形状生成一个全0的数据
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素都是val
np.linspace()根据起止数据等间距填充数据,形成数组
np.concatenate()将两个或多个数组组合成一个新的数组

  1. 从字节流(raw bytes)中创建ndarray数组
  2. 从文件中读取特定格式,创建ndarray数组
ndarray数组的变换


方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.shape()功能一致,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
ndarray数组的类型变换  new_a = a.astype(new_type)
>>> a = np.array([1,2,3],dtype = np.int)
>>> a.dtype
dtype('int32')
>>> b = a.astype(np.float)
>>> b.dtype
dtype('float64')
ndarray数组向列表的转换 ls = a.tolist()
>>> c = a.tolist()
>>> c
[1, 2, 3]

ndarray数组的操作
索引和切片:与python的列表类似

ndarray数组的运算
数组与标量之间的运算作用于数组的每一个元素
对ndarray中的数据执行元素级运算的函数


函数说明
np.abs() np.fabs()计算数组各元素的绝对值
np.sqrt()计算数组各元素的平方根
np.square()计算数组各元素的平方
np.log(x),np.log10(x),np.log2(x)计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x),np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)将数据各元素的整数和小数部分以两个独立的数组形式返回
np.cos/cosh/sin/sinh/tan/tanh计算数据各元素的普通型和双典型的三角函数
np.exp(x)计算数组各元素的指数值
np.sign(x)计算数组各元素的符号值,1(+),0,-1(-)
numpy的二元函数
函数说明
+ - * / **两个数组对应的元素进行相应的运算
np.maximum/minimum/fmax/fmin元素级的最大值/最小值
np.mod(x,y)元素级的模运算
np.copysign(x,y)将元素y中各元素值的符号赋值给数据x对应的元素
> < >= <= == !=算术比较,产生布尔型的数组

numpy数据存取函数
数据的csv文件存取
CSV(Comma-Separated Value,逗号分隔值)是一种常见的文件格式,用来存储批量数据
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
frame: 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array: 存入文件的数组
fmt:写入文件的格式 ,例如%d %.2f %.18e
delimiter: 分割字符串,默认是空格
>>> import numpy as np
>>> a = np.arange(100).reshape(5,20)
>>> np.savetxt('a.csv',a,fmt='%d',delimiter=',')
a.csv文件
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
frame: 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
dtype:数据类型,可选
delimiter: 分割字符串,默认是空格
unpack:如果True,读入属性将分别写入不同的变量
csv只能有效存储一维和二维数组

多维数据的存取
a.tofile(frame,seq=' ',format='%s')
frame:文件,字符串
seq:数据分割字符串,如果是空串,写入文件为二进制
format:写入数据的格式
>>> a = np.arange(100).reshape(5,20)
>>> a.tofile('a.dat',sep=',',format='%d')
np.fromfile(frame,dtype=float,count=-1,sep=' ')
frame:文件,字符串
dtype:读取的数据类型
count:读入元素的个数,-1表示读入整个文件
seq:数据分割字符串,如果是空串,写入文件为二进制
 numpy的便捷文件读取
np.save(fname,array)
np.savez(fname,array)
fname:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数据变量
np.load(fname)
fname:文件名,以.npy为扩展名,压缩扩展名为.npz

numpy的随机数函数
np.random.*


函数说明
rand(d0,d1,...,dn)根据d0-dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,...,dn)根据d0-dn创建随机数数组,标准正态分布
randint(low[,high,shape])根据shape创建随机整数或整数数组,范围是[low,high)
seed(s)随机数种子,s是给定的种子值
shuffle(a)根据数组a的第1轴进行随排列,改变数组a
permutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变数组a
choice(a[,size,replace,p])从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可能重用元素,默认为False
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size为形状
normal(loc,scale,size)产生具有正态分布的数组,loc为均值,scale标准差,size为形状
poisson(lam,size)产生具有泊松分布的数组,lam为随机事件发生率,size为形状

numpy的统计函数

注意: axis = None是统计函数的标配参数
函数说明
sum(a,axis=None)根据给定axis计算数组a相关元素之和,axis整数或元组
mean(a,axis=None)根据给定axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None)根据给定axis计算数组a相关元素的加权平均值
std(a,axis=None)根据给定轴axis计算数组a相关元素的标准差
var(a,axis = None)根据给定轴axis计算数组a相关元素的方差
min(a)  max(a)计算数组a中元素的最小值,最大值
argmin(a) argmax(a)计算数组a中元素的最小值,最大值的降一维后下标
unravel_index(index,shape)根据shape将一维下标index转换成多维下标
ptp(a)计算数组a中元素最大值和最小值的差
median(a)计算数组a中元素的中位数(中值)
numpy的梯度函数


函数说明
np.gradient(f)计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
梯度是指连续值之间的变化率,即斜率
XY坐标轴连续三个x坐标对应的y轴值:a,b,c,其中b的梯度是(c-a)/2 
 
二、matplotlib库入门
matplotlib是Python优秀的数据可视化第三方库
matplotlib库的效果可参考
http://matplotlib.org/gallery.html
matplotlib的使用 由各种可视化类构成,内部结构复杂,受matlab库启发,matplotlab.pyplot是绘制种类可视化图形的命令子库,相当于快捷方式
import matplotlib.pyplot as plt
  1. import matplotlib.pyplot as plt
  2. plt.plot([2,3,4,5,1,6])
  3. plt.ylabel("Grade")
  4. plt.savefig('test',dpi=600)#plt.savefig()将输出图形存储为文件,默认为png格式,可以通过dpi修改输出质量
  5. plt.show()
输出
plt.plot(x,y)当有两个以上参数时,按照x轴和y轴顺序绘制数据点
  1. import matplotlib.pyplot as plt
  2. plt.plot([0,2,4,6,8,10],[2,3,4,5,1,6])
  3. plt.ylabel("Grade")
  4. plt.axis([-1,11,0,7])
  5. plt.show()
输出效果
plot.subplot(nrows,ncols,plot_number)
在全局绘制区域中创建一个分区体系,并定位到一个子绘图区域
pyplot绘图区域示例
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. def f(t):
  4. return np.exp(-t) * np.cos(2*np.pi*t)
  5. a = np.arange(0.0,5.0,0.02)
  6. plt.subplot(211)
  7. plt.plot(a,f(a))
  8. plt.subplot(2,1,2)
  9. plt.plot(a,np.cos(2*np.pi*a),'r--')
  10. plt.show()
输出
plt.plot(x,y,format_string,**kwargs)
x:x轴数据,列表或数组,可选
y:y轴数据,列表或数组
format_string: 控制曲线的格式字符串,可迁
**kwargs: 第二组或更多的(x,y,format_string)
注意:当绘制多条曲线时,各条曲线的x不能省略
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. a = np.arange(10)
  4. plt.plot(a,a*1.5,a,a*2.5,a,a*3.5,a,a*4.5)
  5. plt.show()
 format_string:由颜色字符、风格字符和标记字符组成
颜色字符说明颜色字符说明
'b'blue'm'magenta洋红色
'g'green'y'黄色
'r'red'k'黑色
'c'cyan青绿色'w'白色
'#008000'RGB某颜色'0.8'灰度值字符串


风格字符说明
'-'实线
'--'破折线
'-.'点划线
':'虚线
' '无线条


标记字符说明标记字符说明标记字符说明
'.'点标记'1'下花三角标记'h'竖六边形标记
','像素标记(极小点)'2'上花三角标记'H'横六边形标记
'o'实心圏标记'3'左花三角标记'+'十字形标记
'v'倒三角标记'4'右花三角标记'x'x标记
'^'上三角标记's'实心方形标记'D'菱形标记
'>'右三角标记'p'实心五角标记'd'瘦菱形标记
'<'左三角标记'*'星形标记'|'垂直线标记

**kwargs: 第二组或更多(x,y,format_string)
color: 控制颜色 如color='green'
linestyle:线条控制 如linestyle='dashed'
marker:标记风格,marker='o'
markerfacecolor:标记颜色,markerfacecolor='blue'
markersize:标记尺寸,markersize=20
...
 
pyplot的中文显示
pyplot并不默认支持中文显示,需要rcParams修改字体实现
  1. import matplotlib
  2. import matplotlib.pyplot as plt
  3. matplotlib.rcParams['font.family']='SimHei'
  4. plt.plot([3,1,4,5,2])
  5. plt.ylabel('纵轴值')
  6. plt.savefig('test',dpi=600)
  7. plt.show()

 


属性说明
'font.family'用于显示字体的名字
'font.style'字体风格,正常'normal'或斜体'italic'
'font.size'字体大小,整数字号或者'large','x-small'

rcParams['font.family']
中文字体说明
'SimHei'中文黑体
'Kaiti'中文楷体
'LiSu'中文隶书
'FangSong'中文仿宋
'YouYuan'中文幼圆
STSong华文宋体
  1. import matplotlib
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. matplotlib.rcParams['font.family']='STSong'
  5. matplotlib.rcParams['font.size']=20
  6. a = np.arange(0.0,5.0,0.02)
  7. plt.xlabel('纵轴: 振幅')
  8. plt.ylabel('横轴: 时间')
  9. plt.plot(a,np.cos(2*np.pi*a),'r--')
  10. plt.show()

在有中文输出的地方,增加一个属性:fontproperties
pyplot的文本显示
 

函数说明
plt.xlabel()对x轴增加文本标签
plt.ylabel()对y轴增加文本标签
plt.title()对图形本整体增加文本标签
plt.text()在任意位置增加文本
plt.annotate()在图形中增加带箭头的注释
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. a = np.arange(0.0,5.0,0.02)
  4. plt.xlabel('纵轴: 振幅', fontproperties='SimHei', fontsize=20, color = 'green')
  5. plt.ylabel('横轴: 时间', fontproperties='SimHei', fontsize=20)
  6. plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
  7. plt.text(2,1,r'$\mu=100$',fontsize=15)
  8. plt.plot(a,np.cos(2*np.pi*a),'r--')
  9. plt.show()
输出效果
plt.annotate(s,xy=arrow_crd,xytext=text_crd,arrowprops=dict)
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. a = np.arange(0.0,5.0,0.02)
  4. plt.plot(a,np.cos(2*np.pi*a),'r--')
  5. plt.xlabel('纵轴: 振幅', fontproperties='SimHei', fontsize=20, color = 'green')
  6. plt.ylabel('横轴: 时间', fontproperties='SimHei', fontsize=20)
  7. plt.title(r'正弦波实例$y=cos(2\pi x)$',fontproperties='SimHei',fontsize=25)
  8. plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5),
  9. arrowprops=dict(facecolor='black',shrink=0.1,width=2))
  10. plt.axis([-1,6,-2,2])
  11. plt.grid()
  12. plt.show()
输出


 pyplot的子绘图区域
plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)
如绘图区域2可表示为
plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=1)
ax1: plt.subplot2grid((3,3),(0,0),colspan=3)
ax2: plt.subplot2grid((3,3),(1,0),colspan=1)
ax3: plt.subplot2grid((3,3),(1,2),rowspan=2)
ax4: plt.subplot2grid((3,3),(2,0))
ax1: plt.subplot2grid((3,3),(2,1))
ax1
ax2ax3
ax4ax5
GridSpec类
  1. import matplotlib.gridspec as gridspec
  2. gs = gridspec.GridSpec(3,3)
  3. ax1 = plt.subplot(gs[0,:])
  4. ax2 = plt.subplot(gs[1,:-1])
  5. ax3 = plt.subplot(gs[1:,-1])
  6. ax4 = plt.subplot(gs[2,0])
  7. ax5 = plt.subplot(gs[2,1])

matplotlib库基础图函数示例


函数说明
plt.plot(x,y,fmt,...)绘制一个坐标图
plt.boxplot(data,notch,position)绘制一个箱形图
plt.bar(left,height,width,bottom)绘制一个条形图
plt.barh(width,bottom,left,heitht)绘制一个横向条形图
plt.polar(theta,r)绘制极坐标图
plt.pie(data,explode)绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F)绘制谱图
plt.cohere(x,y,NTTF=256,Fs)绘制X-Y相关性函数
plt.scatter(x,y)绘制散点图,其中x,y长度相同
plt.step(x,y,where)绘制步阶图
plt.hist(x,bins,normed)绘制直方图
plt.contour(X,Y,Z,N)绘制等值图
plt.vlines()绘制垂直图
plt.stem(x,y,linefmt,markerfmt)绘制柴火图
plt.plot_date()绘制数据日期


pyplot饼图的绘制
  1. import matplotlib.pyplot as plt
  2. labels = 'Frogs','Hogs','Dogs','Logs'
  3. sizes = [15,30,45,10]
  4. explode = [0,0.1,0,0]
  5. plt.pie(sizes, explode = explode,labels = labels, autopct = '%1.1f%%',
  6. shadow = False,startangle = 90)
  7. plt.show()
输出

  1. import matplotlib.pyplot as plt
  2. labels = 'Frogs','Hogs','Dogs','Logs'
  3. sizes = [15,30,45,10]
  4. explode = [0,0.1,0,0]
  5. plt.pie(sizes, explode = explode,labels = labels, autopct = '%1.1f%%',
  6. shadow = False,startangle = 90)
  7. plt.axis('equal')
  8. plt.show()
输出
 
绘制直方图
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. np.random.seed(0)
  4. mu,sigma = 100,20
  5. a = np.random.normal(mu,sigma,size=100)
  6. plt.hist(a,20,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)
  7. plt.title('Hitogram')
  8. plt.show()
输出
 
pyplot极坐标图的绘制
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. N = 20
  4. theta = np.linspace(0.0, 2*np.pi, N, endpoint = False)
  5. radii = 10*np.random.rand(N)
  6. width = np.pi/4*np.random.rand(N)
  7. ax = plt.subplot(111,projection = 'polar')
  8. bars = ax.bar(theta, radii, width=width, bottom = 0.0)
  9. for r, bar in zip(radii, bars):
  10. bar.set_facecolor(plt.cm.viridis(r/10.))
  11. bar.set_alpha(0.5)
  12. plt.show()
输出
 

绘制散点图
  1. #-*- coding=utf8 -*-
  2. # 面向对象绘制散点图
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5.  
    fig
    , ax = plt.subplots()
  6. ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
  7. ax.set_title('Simple Scatter')
  8. plt.show()
输出


pandasy库的介绍
pandas库的使用
import pandas as pd
pandas基于numpy实现,常与numpy和matplotlib库一同使用
两个数据类型 Series DataFrame
基于上述两个数据类型的各类操作
基本操作,运算操作,特征类操作 关联类操作
numpy 基础数据类型 关注数据的结构表达 维度: 数据间关系 
pandas:扩展数据类型 关注数据的应用表达 数据与索引间的关系

Series类型:由一组数据及与之相关的数据索引组成
>>> import pandas as pd
>>> a = pd.Series(range(10))
>>> a
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int32
还可以指定数据索引
>>> a = pd.Series(range(4),index=['a','b','c','d'])
>>> a
a    0
b    1
c    2
d    3
dtype: int32
Series类型可以由如下类型创建:
  • Python列表
  • 标量值
  • python字典
  • ndarray
  • 其他函数
由标量值创建时,index不能省略
>>> pd.Series(25,index=['a','b','c'])
a    25
b    25
c    25
dtype: int64
从字典类型创建
>>> pd.Series({'a':1,'b':2,'c':3})
a    1
b    2
c    3
dtype: int64
>>> pd.Series({'a':1,'b':2,'c':3},index = ['b','c','d'])#index从字典中进行选择操作
b    2.0
c    3.0
d    NaN
dtype: float64

从ndarray类型创建
>>> pd.Series(np.arange(5),index=np.arange(9,4,-1))
9    0
8    1
7    2
6    3
5    4
dtype: int32

Series类型的基本操作
  • 包括index和value两部分

>>> a.index#获得索引
Index(['a', 'b', 'c', 'd'], dtype='object')
>>> a.values#获得数据
array([0, 1, 2, 3])
 >>> a[1]#自动索引
1
>>> a['b']#自定义索引
1
>>> a[['b','c']]
b    1
c    2
dtype: int32
  • 操作类似于ndarray类型
    • 索引方法相同,采用[]
    • numpy中运算和操作可用于Series类型
    • 可以通过自定义的列表进行切片
    • 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片
>>> b=pd.Series([9,8,7,6],['a','b','c','d'])
>>> b
a    9
b    8
c    7
d    6
dtype: int64
>>> b[3]
6
>>> b[:3]
a    9
b    8
c    7
dtype: int64
>>> b[b>b.median()]
a    9
b    8
dtype: int64
>>> np.exp(b)
a    8103.083928
b    2980.957987
c    1096.633158
d     403.428793
dtype: float64

  • 操作类似于python字典类型
    • 通过自定义索引访问
    • 保留字in操作
    • 使用.get方法
>>> b=pd.Series([9,8,7,6],['a','b','c','d'])
>>> b['b']
8
>>> 'c' in b
True
>>> 0 in b
False
>>> b.get('f',100)
100

Series类型对齐操作
Series类型的运算中会自动对齐不同索引的数据
>>> b=pd.Series([9,8,7,6],['a','b','c','d'])
>>> a=pd.Series([1,2,3],['c','d','e'])
>>> a+b
a    NaN
b    NaN
c    8.0
d    8.0
e    NaN
dtype: float64

Series类型的name属性
Series对象和索引都可以有名字,存储在在属性.name中
>>> b=pd.Series([9,8,7,6],['a','b','c','d'])
>>> b.name
>>> b.name='Series对象'
>>> b.index.name='索引列'
>>> b
索引列
a    9
b    8
c    7
d    6
Name: Series对象, dtype: int64

Series对象可以随时修改并立即生效
>>> b=pd.Series([9,8,7,6],['a','b','c','d'])
>>> b['a']=15
>>> b.name='Series'
>>> b
a    15
b     8
c     7
d     6
Name: Series, dtype: int64
>>> b.name='New Series'
>>> b['b','c']=20
>>> b
a    15
b    20
c    20
d     6
Name: New Series, dtype: int64

Series是一维带‘标签’数组

DataFrame类型
DataFrame类型由共用相同索引的一组列组成
index_0   data_a data_1 ... data_w
index_1   data_b data_2 ... data_x
index_2   data_c data_3 ... data_y
index_3   data_d data_4 ... data_z
索引                多列数据
DataFrame是一个表格型的数据类型,每列值类型可以不同,即有行索引,也有列索引
常用于表达二维数据,但可以表达多维数据
DataFrame类型可以由如下类型创建
二维ndarray对象
>>> d=pd.DataFrame(np.arange(10).reshape(2,5))
>>> d
   0  1  2  3  4
0  0  1  2  3  4
1  5  6  7  8  9
由一维ndarray、列表、字典、元组或Series类型构成的字典
>>> dt=pd.DataFrame({'one':pd.Series([1,2,3],['a','b','c']),
... 'two':pd.Series([9,8,7,6],['a','b','c','d'])})
>>> dt
   one  two
a  1.0    9
b  2.0    8
c  3.0    7
d  NaN    6

>>> pd.DataFrame(dt,index=['b','c','d'],columns=['two','three'])
   two  three
b    8    NaN
c    7    NaN
d    6    NaN
>>> d1={'one':[1,2,3,4],'two':[9,8,7,6]}
>>> d = pd.DataFrame(d1,index=['a','b','c','d'])
>>> d
   one  two
a    1    9
b    2    8
c    3    7
d    4    6
Series类型
其他的DataFrame类型

数据类型操作
如何改变Series和DataFrame类型
增加或重排:重新索引
删除:drop
重新索引
.reindex(index=None,columns=None,...)


参数说明
index, columns新的行列自定义索引
fill_value重新索引中,用于填充缺失位置的值
method填充方法,ffill当前值向前填充,bfill向后填充
limit最大填充量
copy默认True,生成新的对象,False时,新旧相等不复制
索引类型
Series和DataFrame的索引是Index类型,
Index对象是不可修改对象类型


方法说明
.append(idx)连接另一个Index对象,产生新的Index对象
.diff(idx)计算差集,产生新的Index对象
.intersection(idx)计算交集
union(idx)计算并集
delete(loc)删除loc位置处的元素
insert(loc,e)在loc位置上增加一个元素e
.drop方法能够删除Series和DataFrame指定行或列索引

算术运算法则
算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐时缺项填充NaN
二维和一维,一维和零维间为广播运算
采用+ - * / 符号进行的二元运算产生新的的对象
>>> a = pd.DataFrame(np.arange(12).reshape(3,4))
>>> b = pd.DataFrame(np.arange(20).reshape(4,5))
>>> a+b
      0     1     2     3   4
0   0.0   2.0   4.0   6.0 NaN
1   9.0  11.0  13.0  15.0 NaN
2  18.0  20.0  22.0  24.0 NaN
3   NaN   NaN   NaN   NaN NaN
>>> a*b
      0     1      2      3   4
0   0.0   1.0    4.0    9.0 NaN
1  20.0  30.0   42.0   56.0 NaN
2  80.0  99.0  120.0  143.0 NaN
3   NaN   NaN    NaN    NaN NaN


方法 说明
.add(d,**argws)类型间加法运算,可选参数
.sub(d,**argws)类型间减法运算,可选参数
.mul(d,**argws)类型间乘法运算,可选参数
.div(d,**argws)类型间除法运算,可选参数
>>> a
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
>>> b
    0   1   2   3   4
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
>>> b.add(a,fill_value=100)#fill_value替代NaN,替代后参与运算
       0      1      2      3      4
0    0.0    2.0    4.0    6.0  104.0
1    9.0   11.0   13.0   15.0  109.0
2   18.0   20.0   22.0   24.0  114.0
3  115.0  116.0  117.0  118.0  119.0
>>> a.mul(b,fill_value=0)
      0     1      2      3    4
0   0.0   1.0    4.0    9.0  0.0
1  20.0  30.0   42.0   56.0  0.0
2  80.0  99.0  120.0  143.0  0.0
3   0.0   0.0    0.0    0.0  0.0

数据的排序
.sort_index(axis=0,ascending=True)



 

 

 




posted on 2017-06-09 08:21  blackclody  阅读(6338)  评论(0编辑  收藏  举报