pandas 每一列相加_Python3 numpy amp; pandas 学习笔记
生活随笔
收集整理的這篇文章主要介紹了
pandas 每一列相加_Python3 numpy amp; pandas 学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫在前面
在用python做一些ML和DL的工作前,先看莫煩大佬的視頻學習一下numpy和pandas這兩個數據處理包,學習中記了一些筆記,便于自己日后查閱,同時發布到知乎希望能夠幫助到其他小伙伴!
視頻如下:
Numpy & Pandas (莫煩 Python 數據處理教程)_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com一、numpy & pandas 有什么用
ML、DL的基礎,用于數據分析。
計算速度更快,比py自帶的數據結構快很多,因為numpy和pandas是用C寫的,panda是numpy的升級版。
矩陣計算速度快。
二、numpy & pandas 安裝
pip install numpy
pip install pandas
三、numpy 基本屬性
import numpy as np array = np.array([[1,2,3],[2,3,4]]) #創建矩陣 print(array) #打印矩陣 print('number of dim:', array.ndim) #矩陣維度 print('shape:', array.shape) #矩陣形狀(n*m) n行m列 print('size:', array.size) #矩陣元素數量四、numpy 創建 array
import numpy as np a = np.array([2,23,4], dtype=np.int) #定義數據的格式為int, 還有int64、int32、float64、float32 print(a.dtype) #打印矩陣a中的元素數據類型b = np.array([[2,23,4],[2,32,4]]) #定義2*3的矩陣 c = np.zeros((3,4)) # 定義全部為0的矩陣,參數為shape print(c)d = np.ones((3,4), dtype=np.int16) # 定義全部為1的矩陣,參數為shape print(d)e = np.empty((3,4)) # 定義全部為無窮小的矩陣,參數為shape print(e)f = np.arange(10, 20, 2) # 從10到20,不包含20,步長為2 print(f)g = np.arange(12).reshape((3,4)) # 從0到12,不包含12,步長為1,重新定義大小為3*4 print(g)h = np.linspace(1, 10, 20).reshape((4,5)) # 數列,從1到10,分為20段,最后一個是10..#也可以更改shape print(h)五、numpy 基礎運算1
#數列操作 import numpy as np a = np.array([10, 20, 30, 40]) b = np.arange(4) #0,1,2,3print(a, b) #[10 20 30 40] [0 1 2 3] c = a-b print(c) #[10 19 28 37]c = a+b print(c) #[10 21 32 43]c = b**2 #b的平方 print(c) #[0 1 4 9]c = 10*np.sin(a) #對a的每一個元素求sin,然后乘以10 # tan、cos類似 print(c) #[-5.44021111 9.12945251 -9.88031624 7.4511316 ]print(b) #[0 1 2 3] print(b<3) #[ True True True False] #判斷,同理可以用其他判斷符#矩陣操作 import numpy as np a = np.array([[1,1],[0,1]]) b = np.arange(4).reshape((2,2)) #0,1,2,3print(a) print(b)c = a*b #元素逐個相乘 c_dot = np.dot(a, b) #矩陣乘法 print(c) print(c_dot)c_dot_2 = a.dot(b) # 與c_dot = np.dot(a, b)相同a = np.random.random((2, 4)) #隨機矩陣,0-1的均勻分布 print(a)print(np.sum(a)) #求和 print(np.min(a)) #最小值 print(np.max(a)) #最大值print(np.sum(a, axis=1)) #按照每一行或每一列計算,0表示對列操作,1表示對行操作#min 和 max 類似六、numpy 基礎運算2
import numpy as npa = np.arange(14, 2, -1).reshape((3, 4)) print(a)print(np.argmin(a)) #輸出最小值的index print(np.argmax(a)) #輸出最大值的indexprint(np.mean(a)) #平均值 也可以 a.meanin print(np.average(a)) #同mean, 但不可以a.averageprint(np.median(a)) #中位數print(np.cumsum(a)) #逐位相加 輸出n*m個元素 一行,前綴和 print(np.diff(a)) #累差,每兩個之間的差, n*(m-1)print(np.nonzero(a)) #輸出非零元素的行和列 index,行為一個array,列為一個arrayprint(np.sort(a)) #默認按照每一行排序,行間不排序print(np.transpose(a)) #轉置 print(a.T) #轉置print((a.T).dot(a)) # aT * aprint(np.clip(a, 5, 9)) #所有大于9的數變成了9,所有小于5的數變成了5,中間的數不變其中很多計算函數,如mean、median 都可以在參數中指定axis,0表示每一列計算,1表示每一行計算。
七、numpy 索引
import numpy as npa = np.arange(3, 15) print(a)print(a[3]) #輸出3號元素a = a.reshape((3, 4)) print(a) print(a[2]) #輸出2號行 print(a[1][1]) #輸出第一行第一列 print(a[1,1]) #等價于上一行 print(a[1,:]) #:代表所有數 print(a[1,1:3]) #第1行的 從第1列到第3列print() for row in a:print(row) #循環輸出每一行for col in a.T:print(col) #循環輸出每一列for item in a.flat: #轉換成一行 #a.flatten() 返回一個一行的序列print(item) #循環輸出每一個item八、numpy array合并
import numpy as npa = np.array([1, 1, 1]) b = np.array([2, 2, 2])c = np.vstack((a, b)) #vertical stack 上下合并 print(c) print(a.shape, c.shape)d = np.hstack((a, b)) #horizontal stack 左右合并 print(d) print(a.shape, d.shape)print(a[np.newaxis, :]) #為行新加一個維度 變成了1*3 print(a[:, np.newaxis]) #為列新加一個維度 變成了3*1a = a[:, np.newaxis] b = b[:, np.newaxis] print(np.hstack((a,b))) #縱向合并,變成3*2c = np.concatenate((a,b,b,a), axis=1) #合并,0是上下合并,1是左右合并 print(c)由于我之前一直使用的MATLAB,所以python的這一部分有些不能理解,為什么一維向量轉置后還是本身?經過測試,我個人理解numpy的工作很看重維度,一維下轉置還是一維,所以還是自己本身。使用newaxis擴展維度后,變成了二維,才可以做真正的轉置。
在一維下進行合并,也只能橫向擴展,不能跨越維度
九、numpy的array分割
import numpy as npa = np.arange(12).reshape((3,4)) print(a)print(np.split(a,3,axis=0)) #0為按行切割, 1為按列切割 #不能進行不等的分割 split(a,2,axis=0)print(np.array_split(a,3,axis=1)) #可以不等分割print(np.vsplit(a,3)) #縱向分割 相當于axis=0 print(np.hsplit(a,2)) #橫向分割 相當于axis=1十、numpy的 copy & deep copy
import numpy as npa = np.arange(4) print(a) b = a c = a d = b a[0] = 11 print(a) print(b) #與a相同,所以直接賦值是淺拷貝 print(c is a) #Trueb = a.copy() # deep copy a[0] = 88 print(a) print(b)十一、pandas 基本介紹
如果說numpy像列表,那pandas像字典。
pandas可以為行和列自定義名字,在ML中,可以將其命名為feature的名字
import numpy as np import pandas as pds = pd.Series([1,3,6,np.nan,44,1]) #有序號的列表 print(s)dates = pd.date_range('20160101', periods=6) #日期序列 print(dates)df = pd.DataFrame(np.random.randn(6,4),index = dates, columns=['a', 'b', 'c', 'd']) #行是index columns 是列 print(df)df1 = pd.DataFrame(np.arange(12).reshape((3,4))) print(df1) #行和列的名字默認是 從0開始的序號df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20130102'),'C':pd.Series(1,index=list(range(4)),dtype='float32'),'D':np.array([3]*4,dtype='int32'),'E':pd.Categorical(["test", "train", "test", "train"]),'F':'foo'}) #可以傳入一個字典,其中A B C D E F 為列名 print(df2)print(df2.dtypes) #查看每一列的數據類型 print(df2.index) #每一行的名字 print(df2.columns) # 每一列的名字 print(df2.values) #每一個值 print(df2.describe()) #輸出每一列的 count、mean、std、min、25%、50%、75%、max print(df2.T) #轉置 print(df2.sort_index(axis=1,ascending=False)) #axis為1是按列排序,0是按行排序,ascending=false:倒序排序print(df2.sort_index(axis=0,ascending=False))print(df2.sort_values(by='E')) #對其中的值排序,根據某一列十二、pandas 選擇數據
import numpy as np import pandas as pddates = pd.date_range('20130101', periods=6) df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D'])print(df) print(df['A'], df.A) #打印第A列 print(df[0:3], df['20130102':'20130104']) #打印第0-3行,然后打印第02-04行#select by label:loc print(df.loc['20130102']) #按照標簽選擇 print(df.loc[:,['A','B']]) #所有行的A列和B列 print(df.loc['20130102',['A','B']]) #選擇某些數據#select by position:iloc print(df.iloc[3, 1]) #第三行第一列 print(df.iloc[3:5, 1:3]) #切片 print(df.iloc[[1,3,5], 1:3]) #不連續的篩選#mixed selection:ix #print(df.ix[:3,['A','C']]) #報錯,python3已經棄用ix#Boolean indexing print(df[df.A > 8]) #篩選出A列中大于8的行ix已經棄用,會報錯十三、pandas 設置值
import numpy as np import pandas as pddates = pd.date_range('20130101', periods=6) df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D']) print(df)df.iloc[2,2] = 1111 #按照index修改值 df.loc['20130101','B'] = 2222 df[df.A>4] = 0 #把第A列大于4的行都改為0,修改所有列的 print(df)df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D']) df.A[df.A>4] = 0 #只修改第A列的 print(df)df['F'] = np.nan #增加一列 nan df['E'] = pd.Series([1,2,3,4,5,6], index=dates) #增加一列,序列 print(df)十四、pandas 處理丟失數據
import numpy as np import pandas as pddates = pd.date_range('20130101', periods=6) df = pd.DataFrame(np.arange(24).reshape((6,4)), index=dates, columns=['A','B','C','D']) df.iloc[0,1] = np.nan df.iloc[1,2] = np.nan #創造丟失數據 print(df)#drop print(df.dropna(axis=0, how='any')) #丟掉數據,axis=0 丟掉這一行 #how={'any','all'} any: 有一個nan 就丟掉這一行, all:全部為nan才丟掉, 默認anyprint(df.dropna(axis=1, how='any')) #丟掉數據,axis=1 丟掉這一列#fill print(df.fillna(value=0)) #將nan填充為0 print(df.isnull()) #對每個value判斷是否為nan 返回beal 矩陣 print(np.any(df.isnull())==True) #只要有一個丟失的數據,就返回true十五、pandas 導入導出數據
import numpy as np import pandas as pd#讀入 data = pd.read_csv('student.csv') #讀取csv表格 print(data) #會在每一行自動加一個索引 0-n#存儲 data.to_pickle('student.pickle') #寫出為pickle文件讀為 read_#
寫入為 to_#
其中#都可以用如下字符代替:
- csv
- excel
- hdf
- sql
- json
- msgpack
- html
- gbq
- stata
- sas
- clipboard
- pickle
十六、pandas 合并 concat
import numpy as np import pandas as pd# concatenatingdf1 = pd.DataFrame(np.ones((3,4))*0, columns=['a', 'b','c', 'd']) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a', 'b','c', 'd']) df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a', 'b','c', 'd']) print(df1) print(df2) print(df3) res = pd.concat([df1, df2, df3], axis=0) #合并, 0為縱向合并,1為橫向合并 #此方法行的index重復了 print(res)res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) #index重新排序 print(res)#join ['inner', 'outer']df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a', 'b','c', 'd'], index=[1,2,3]) df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b', 'c','d', 'e'], index=[2,3,4]) print(df1) print(df2)res = pd.concat([df1, df2]) #默認為outer模式合并,把沒有的列用nan填充 print(res) res = pd.concat([df1, df2], join='inner') #inner為只合并共有的列 print(res)#res = pd.concat([df1,df2], axis=1, join_axes=[df1.index]) #橫向合并,由于行的index不一樣,使用join_axes使得其按照df1的index進行合并,df2中缺失值用nan填充 #由于join_axes已被棄用,會報錯#append res = df1.append([df2,df3], ignore_index=True) #在其后追加 print(res)s1 = pd.Series([1,2,3,4],index=['a','b','c','d']) res = df1.append(s1, ignore_index=True) print(res)join_axes 已被棄用其中 s1 = pd.Series([1,2,3,4],index=['a','b','c','d'])
對列標簽用了index,如果使用columns會報錯
與第八講補充內容一致,由于此向量為一維,所以不存在列的概念,故只能使用index
十七、pandas 合并 merge
import numpy as np import pandas as pd#merging two df by key/keys.(may be used in database) #simple exampleleft = pd.DataFrame({'key':['K0', 'K1', 'K2', 'K3'],'A':['A0', 'A1', 'A2', 'A3'],'B':['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key':['K0', 'K1', 'K2', 'K3'],'C':['C0', 'C1', 'C2', 'C3'],'D':['D0', 'D1', 'D2', 'D3']}) print(left) print(right) res = pd.merge(left, right, on='key') #基于key這一列合并 print(res)#consider two keys left = pd.DataFrame({'key1':['K0', 'K0', 'K1', 'K2'],'key2':['K0', 'K1', 'K0', 'K1'],'A':['A0', 'A1', 'A2', 'A3'],'B':['B0', 'B1', 'B2', 'B3']}) right = pd.DataFrame({'key1':['K0', 'K1', 'K1', 'K2'],'key2':['K0', 'K0', 'K0', 'K0'],'C':['C0', 'C1', 'C2', 'C3'],'D':['D0', 'D1', 'D2', 'D3']}) print(left) print(right) res = pd.merge(left, right, on=['key1','key2']) #默認只合并相同的key (how='inner') print(res)#how = ['left', 'right', 'outer', 'inner'] res = pd.merge(left, right, on=['key1','key2'], how='outer') #全部合并,沒有的用nan填充 print(res) res = pd.merge(left, right, on=['key1','key2'], how='right') #以right的key為基準進行填充 print(res)#indicator df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a', 'b']}) df2 = pd.DataFrame({'col1':[1,2,2], 'col_right':[2,2,2]}) print(df1) print(df2) res = pd.merge(df1, df2, on='col1', how='outer', indicator=True) #指示出如何合并的 默認在_merge列 print(res) res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')#更改了合并方式的列名 print(res)#merged by index left = pd.DataFrame({'A':['A0', 'A1', 'A2'],'B':['B0', 'B1', 'B2']},index=['K0', 'K1', 'K2']) right = pd.DataFrame({'C':['C0', 'C2', 'C3'],'D':['D0', 'D2', 'D3']},index=['K0', 'K2', 'K3']) print(left) print(right) # left_index and right_index res = pd.merge(left, right, left_index=True, right_index=True, how='outer') #left_index 和 right_index 默認false, 表示考慮index來合并 print(res)#handle overlapping boys = pd.DataFrame({'k':['K0','K1','K2'], 'age':[1,2,3]}) girls = pd.DataFrame({'k':['K0','K0','K3'], 'age':[4,5,6]}) print(boys) print(girls) res = pd.merge(boys, girls, on='k', how='inner', suffixes=['_boy', '_girl']) #為left 和 right 相同的列增加前綴,為不同的列 print(res)十八、pandas plot 畫圖
import numpy as np import pandas as pd import matplotlib.pyplot as plt#plot data#Series data = pd.Series(np.random.randn(1000), index=np.arange(1000)) data = data.cumsum() #累加和 print(data) data.plot() #畫圖 plt.show()#DataFrame data = pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list("ABCD")) data = data.cumsum() print(data.head()) #打印前5個 data.plot() plt.show()#plot methods: #bar, hist, box, kde, area, scatter, hexbin, pie ax = data.plot.scatter(x='A', y='B', color='DarkBlue', label='Claass 1') #分布點 data.plot.scatter(x='A', y='C', color='DarkGreen', label='Class 2', ax=ax) #一張圖畫兩組數據 plt.show() 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的pandas 每一列相加_Python3 numpy amp; pandas 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下使用odbc连接mysql_
- 下一篇: python123外汇兑换计算器_Pyt