NumPy 簡單使用
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。java
import numpy as np np.array([1,2,3,4,5]) #一維數組 np.array([[1,2,3.2],[4,5,6]]) #二維數組的建立
注意:
numpy默認ndarray的全部元素的類型是相同的
若是傳進來的列表中包含不一樣的類型,則統一爲同一類型,優先級:str>float>intpython
matplotlib 繪圖的數組
使用matplotlib.pyplot獲取一個numpy數組,數據來源於一張圖片數據結構
import matplotlib.pyplot as plt %matplotlib inline cat_img_arr = plt.imread('./cat.jpg')#外部圖片裝numpy中 cat_img_arr cat_img_arr.shape#顯示維度 plt.imshow(cat_img_arr)#顯示3惟數組 plt.imshow(cat_img_arr+100)
索引dom
arr = np.random.randint(60,100,size=(7,5))建立啊一個隨機的7行5列的數據 根據索引修改數據 arr[0]#取出第一行 arr[[0,1]]#取出前2行
切片函數
array([[75, 90, 93, 74, 91], [62, 62, 83, 88, 62], [78, 61, 92, 67, 82], [66, 73, 62, 61, 66], [93, 73, 72, 67, 93], [79, 71, 98, 69, 62], [64, 94, 98, 83, 74]]) arr[0:2]#獲取二維數組前兩列 array([[75, 90, 93, 74, 91], [62, 62, 83, 88, 62]]) arr[:,0:2] #逗號左邊表示行 右邊表示列 array([[75, 90], [62, 62], [78, 61], [66, 73], [93, 73], [79, 71], [64, 94]]) arr[0:2,0:2]#獲取二維數組前兩行和前兩列數據 array([[75, 90], [62, 62]]) arr[::-1]#將數組的行倒序 arr[:,::-1]#列倒序 arr[::-1,::-1] #所有倒序 plt.imshow(cat_img_arr[:,::-1,:])#小貓左右反轉 arr_3 = np.concatenate((cat_img_arr,cat_img_arr,cat_img_arr),axis=1)#1是橫向 arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)#0是縱向 plt.imshow(arr_9)
Pandas 的數據結構
from pandas import Series,DataFrame#pandas的重點 import pandas as pd import numpy as np
Series是一種相似與一維數組的對象,由下面兩個部分組成:spa
- values:一組數據(ndarray類型)
- index:相關的數據索引標籤
#使用列表建立Series Series(data=[1,2,3]) Series(data=[1,2,3],index=['a','b','c'])#經過index設置顯示索引
由字典建立:不能在使用index.可是依然存在默認索引設計
注意:數據源必須爲一維數據3d
dic = { '語文':99, '數學':100, '英語':88, '理綜':120 } s = Series(data=dic)
使用多種方法建立如下Series,命名爲s1:
語文 150
數學 150
英語 150
理綜 300code
Series的索引和切片
import pandas as pd import numpy as np dic={ '語文':99, '數學':100, '英文':88 } s=Series(data=dic) print(s[0]) print(s[0:2]) ######## 99 ######## 語文 99 數學 100
s['毛概'] = 111 向Series增長一行:至關於給字典增長一組鍵值對
能夠經過shape,size,index,values等獲得series的屬性
s.values#打印出全部的values
array([100, 120, 88, 99, 111], dtype=int64)
可使用s.head(),tail()分別查看前n個和後n個值
s.tail(2)
對Series元素進行去重
s1 = Series(data=[1,1,1,2,2,2,3,3,4,56,6,7,8,8,8,7])
s1.unique()
當索引沒有對應的值時,可能出現缺失數據顯示NaN(not a number)的狀況
- 使得兩個Series進行相加
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','b','d'])
s = s1 + s2
a 2.0 b 4.0 c NaN d NaN
可使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函數檢測缺失數據
pd.isnull()#檢測哪些是空
pd.notnull()#返回非空的值
DataFrame
DataFrame是一個【表格型】的數據結構。DataFrame由按必定順序排列的多列數據組成。設計初衷是將Series的使用場景從一維拓展到多維。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values
使用ndarray建立DataFrame 二維的
df = DataFrame(data=np.random.randint(60,100,size=(3,3)))
df
df = DataFrame(data=np.random.randint(60,100,size=(3,3)),index=['a','b','c'],columns=['A','B','C'])
df
DataFrame屬性:values、columns、index、shape
df.values
df.index
df.shape
使用ndarray建立DataFrame:建立一個表格用於展現張三,李四,王五的java,python的成績
dic = { '張三':[150,150,150,150], '李四':[0,0,0,0] } df = DataFrame(data=dic,index=['語文','數學','英語','理綜']) df
#修改列索引
df.columns = ['zhangsan','lisi']
df
#獲取前兩列
df[[0,1]]
使用.loc[]加index來進行行索引
使用.iloc[]加整數來進行行索引 隱式索引
df.iloc[[0,1]]#取0到1行
df.iloc[3,6]#取絕對3行6列
切片
#切出df中的前兩行
df[0:3]
#切出df中的前兩列
df.iloc[:,0:2] #必須使用loc、iloc結合着逗號進行切列操做
df[0]#取列
df.iloc[0]#行
df.iloc[1,2]#元素
df[0:2] #切行
df.iloc[:,0:2] #切列
DataFrame的運算
同Series同樣:
- 在運算中自動對齊不一樣索引的數據
- 若是索引不對應,則補NaN
df1 = DataFrame(data=np.random.randint(0,100,size=(3,3)),index=['a','b','c'])
df2 = DataFrame(data=np.random.randint(0,100,size=(3,3)),index=['a','d','c'])
df1+df2
練習:
-
假設ddd是期中考試成績,ddd2是期末考試成績,請自由建立ddd2,並將其與ddd相加,求期中期末平均值。
-
假設張三期中考試數學被發現做弊,要記爲0分,如何實現?
-
李四由於舉報張三做弊立功,期中考試全部科目加100分,如何實現?
-
後來老師發現有一道題出錯了,爲了安撫學生情緒,給每位學生每一個科目都加10分,如何實現?
dic = { '張三':[150,150,150,150], '李四':[0,0,0,0] } df = DataFrame(data=dic,index=['語文','數學','英語','理綜']) qizhong = df qimo = df (qizhong+qimo)/2 df.loc['數學','張三'] = 0#行是數學 列是張三 df qizhong['李四'] += 100 qizhong qizhong += 10 qizhong
練習
- 使用tushare包獲取某股票的歷史行情數據。
- 輸出該股票全部收盤比開盤上漲3%以上的日期。
- 輸出該股票全部開盤比前日收盤跌幅超過2%的日期。
- 假如我從2010年1月1日開始,每個月第一個交易日買入1手股票,每一年最後一個交易日賣出全部股票,到今天爲止,個人收益如何?
df = ts.get_k_data(code='600519',start='2000-01-01') #將請求的數據存儲起來 df.to_csv('./600519.csv') #將600519.csv文件中的數據讀取到df df = pd.read_csv('./600519.csv',index_col='date',parse_dates=['date'])#把當前時間做爲行索引 df.drop(labels='Unnamed: 0',axis=1,inplace=True)#刪除列中Unnamed 在當前文件中執行 df.head(5) #輸出該股票全部收盤比開盤上漲3%以上的日期。 #(收盤-開盤) / 開盤 》 0.03 (df['close'] - df['open']) / df['open'] > 0.03#邏輯運算返回true和False df.loc[[True,False,True]]#篩選爲True的 df.loc[(df['close'] - df['open']) / df['open'] > 0.03].index#取出日期