Python數據分析和展示



 
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 顯示所有的魔術命令
%hist IPython命令的輸入歷史
%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 秩,即軸的數量或維度的數量
.shape ndarray對象尺度,對於 矩陣,n行m列
.size ndarray對象元素的個數,相當於.shape中的n*m的值
.dtype ndarray對象的元素類型
.itemsize ndarray對象中每個元素的大小,以字節為單位
>>> 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]
int16 16位長度的整數,取值:[-32768,32767]
int32 32位長度的整數,取值:[-231,231-1]
int64 64位長度的整數,取值:[-263,263-1]
uint8 8位無符號整數,取值:[0,255]
uint16 16位無符號整數,取值:[0,65535]
uint32 32位無符號整數,取值:[0,232-1]
uint64 64位無符號整數,取值:[0,264-1]
float16 16位半精度浮點數
float32 32位半精度浮點數
float64 64位半精度浮點數
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
ax2 ax3
ax4 ax5
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)



 

 

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM