本文目錄一覽:
- 1、python–pandas合併與連接
- 2、python自帶及pandas、numpy數據結構(一)
- 3、Python數據分析庫有哪些
- 4、Python數據分析: 初識Pandas,理解Pandas實現和原理
- 5、python如何下載pandas
python–pandas合併與連接
append 方法根據行在原數據框添加新的數據框。
如果想要合併後的數據框索引重寫排序,可以設置參數 ignore_index=True 。
concat 函數是panda自帶的,可以按行或按列合併多個pandas數據框。
按行合併多個數據框,需要注意的是 objs參數接受一個可迭代對象 。concat函數默認按行合併。
設置 ignore_index=True ,使合併後的數據框索引重新排序。
按行合併時,concat對所有的列進行全連接(參數 join=’outer’ ),沒有的列會填充為NaN。
設置參數 join=’inner’ ,可以只保留共有的列。
設置參數 axis=1 或 axis=’columns’ ,可以按列合併多個數據框。
merge 方法根據列或索引連接數據框。
當兩個數據框只有一個相同列時, merge 方法會自動根據相同列進行內連接, on 參數可以省略。
設置參數 how=[‘left’,’right’,’outer’,’inner’,’cross’] ,可以完成不同類型的連接。
當兩個數據框沒有相同列時,需要設置 left_on 和 right_on 參數,表示按這兩列進行連接。
如果需要根據數據框的索引進行連接,需要根據需求設置參數 left_index=True 或者 right_index=True 。
設置 suffixes ,可以給相同的列名添加後綴。默認後綴是 _x , _y 。
join 方法與 merge 方法作用相同,基本上 merge 方法已經可以完成所有的連接操作。
join 方法對按索引連接更方便而已。
當連接的兩個數據框中沒有相同列時,可以直接按索引進行左連接。
同樣,可以設置 how 參數,控制連接的行為。
當數據框中有相同列時,需要設置後綴。
python自帶及pandas、numpy數據結構(一)
1.python自帶數據結構:序列(如list)、映射(如字典)、集合(set)。
以下只介紹序列中的list:
創建list:
list1 = []
list1 = [1,2,3,4,5,6,7,8,9] #逗號隔開
list2 = [[1,2],[3,4],[5,6],[7,8]] #list2長度(len(list2))為2,list2[0] = [1,2]
liststring = list(“thisisalist”) #只用於創建字符串列表
索引list:
e = list1[0] #下標從零開始,用中括號
分片list:
es = list1[0:3]
es = list1[0:9:2] #步長在第二個冒號後
list拼接(list1.append(obj)、加運算及乘運算):
list長度:
list每個元素乘一個數值:
list2 = numpy.dot(list2,2)
list類似矩陣相乘(每個元素對應相乘取和):
list3 = numpy.dot(list1,list1)
#要求相乘的兩個list長度相同
list3 = numpy.dot(list2,list22)
#要求numpy.shape(list2)和numpy.shape(list22)滿足“左行等於右列”的矩陣相乘條件,相乘結果numpy.shape(list3)滿足“左列右行”
2.numpy數據結構:
Array:
產生array:
data=np.array([[1, 9, 6], [2, 8, 5], [3, 7, 4]])
data=np.array(list1)
data1 = np.zeros(5) #data1.shape = (5,),5列
data1 = np.eye(5)
索引array:
datacut = data[0,2] #取第零行第二列,此處是6
切片array:
datacut = data[0:2,2] # array([6, 5])
array長度:
data.shape
data.size
np.shape(data)
np.size(data)
len(data)
array拼接:
#括號內也有一個括號(中括號或者小括號)!
d = np.concatenate((data,data))
d = np.concatenate((data,data),axis = 1) #對應行拼接
array加法:逐個相加
array乘法:
d = data data #逐個相乘
d = np.dot(data,data) #矩陣相乘
d = data 3 #每個元素乘3
d = np.dot(data,3) #每個元素乘3
array矩陣運算:
取逆 : np.linalg.inv(data)
轉置:data.T
所有元素求和 : np.sum(data)
生成隨機數:np.random.normal(loc=0, scale=10, size=None)
生成標準正態分布隨機數組:np.random.normal(size=(4,4))
生成二維隨機數組:
np.random.multivariate_normal([0,0],np.eye(2))
生成範圍在0到1之間的隨機矩陣(M,N):
np.random.randint(0,2,(M,N))
Matrix:
創建matrix:
mat1 = np.mat([[1, 2, 3], [4, 5, 6]])
mat1 = np.mat(list)
mat1 = np.mat(data)
matrix是二維的,所有+,-,*都是矩陣操作。
matrix索引和分列:
mat1[0:2,1]
matrix轉置:
np.transpose(mat1)
mat1.transpose()
matrix拼接:
np.concatenate([mat1,mat1])
np.concatenate([mat1,mat1],axis = 1)
numpy數據結構總結:對於numpy中的數據結構的操作方法基本相同:
創建:np.mat(list),np.array(list)
矩陣乘:np.dot(x,y)
轉置:x.T or np.transpose(x)
拼接:np.concatenate([x,y],axis = 1)
索引:mat[0:1,4],ary[0:1,4]
3.pandas數據結構:
Series:
創建series:
s = pd.Series([[1,2,3],[4,5,6]],index = [‘a’,‘b’])
索引series:
s1 = s[‘b’]
拼接series:
pd.concat([s1,s1],axis = 1) #也可使用s.append(s)
DataFrame:
創建DaraFrame:
df = pd.DataFrame([[1,2,3],[1,2,3]],index = [‘a’,’b’],columns = [‘x’,’y’,’z’])
df取某一列:
dfc1 =df.x
dfc1 = df[‘x’]
dfc2 = df.iloc[:,0] #用.iloc方括號里是數字而不是column名!
dfc2 = df.iloc[:,0:3]
df取某一行:
dfr1 = df.iloc[0]
df1 = df.iloc[0:2]
df1 = df[0:2] #這種方法只能用於取一個區間
df取某個值:
dfc2 = df.iloc[0,0]
dfc2 = df.iloc[0:2,0:3]
Python數據分析庫有哪些
Python數據分析必備的第三方庫:
1、Pandas
Pandas是Python強大、靈活的數據分析和探索工具,包含Serise、DataFrame等高級數據結構和工具,安裝Pandas可使Python中處理數據非常快速和簡單。
Pandas是Python的一個數據分析包,Pandas最初使用用作金融數據分析工具而開發出來,因此Pandas為時間序列分析提供了很好的支持。
Pandas是為了解決數據分析任務而創建的,Pandas納入了大量的庫和一些標準的數據模型,提供了高效的操作大型數據集所需要的工具。Pandas提供了大量是我們快速便捷的處理數據的函數和方法。Pandas包含了高級數據結構,以及讓數據分析變得快速、簡單的工具。
2、Numpy
Numpy可以提供數組支持以及相應的高效處理函數,是Python數據分析的基礎,也是Scipy、Pandas等數據處理和科學計算庫最基本的函數功能庫,且其數據類型對Python數據分析十分有用。
Numpy提供了兩種基本的對象:ndarray和ufunc。ndarray是存儲單一數據類型的多維數組,而ufunc是能夠對數組進行處理的函數。
3、Matplotlib
Matplotlib是強大的數據可視化工具和作圖庫,是主要用於繪製數據圖表的Python庫,提供了繪製各類可視化圖形的命令字庫、簡單的接口,可以方便用戶輕鬆掌握圖形的格式,繪製各類可視化圖形。
Matplotlib是Python的一個可視化模塊,他能方便的只做線條圖、餅圖、柱狀圖以及其他專業圖形。
Matplotlib是基於Numpy的一套Python包,這個包提供了豐富的數據繪圖工具,主要用於繪製一些統計圖形。
4、SciPy
SciPy是一組專門解決科學計算中各種標準問題域的包的集合,包含的功能有最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算等,這些對數據分析和挖掘十分有用。
SciPy是一款方便、易於使用、專門為科學和工程設計的Python包,它包括統計、優化、整合、線性代數模塊、傅里葉變換、信號和圖像處理、常微分方程求解器等。Scipy依賴於Numpy,並提供許多對用戶友好的和有效的數值例程,如數值積分和優化。
5、Keras
Keras是深度學習庫,人工神經網絡和深度學習模型,基於Theano之上,依賴於Numpy和Scipy,利用它可以搭建普通的神經網絡和各種深度學習模型,如語言處理、圖像識別、自編碼器、循環神經網絡、遞歸審計網絡、卷積神經網絡等。
6、Scrapy
Scrapy是專門為爬蟲而生的工具,具有URL讀取、HTML解析、存儲數據等功能,可以使用Twisted異步網絡庫來處理網絡通訊,架構清晰,且包含了各種中間件接口,可以靈活的完成各種需求。
7、Gensim
Gensim是用來做文本主題模型的庫,常用於處理語言方面的任務,支持TF-IDF、LSA、LDA和Word2Vec在內的多種主題模型算法,支持流式訓練,並提供了諸如相似度計算、信息檢索等一些常用任務的API接口。
Python數據分析: 初識Pandas,理解Pandas實現和原理
本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理
01 重要的前言
這段時間和一些做數據分析的同學閑聊,我發現數據分析技能入門階段存在一個普遍性的問題,很多憑着興趣入坑的同學,都能夠很快熟悉Python基礎語法,然後不約而同的一頭扎進《利用Python進行數據分析》這本經典之中,硬着頭皮啃完之後,好像自己什麼都會了一點,然而實際操作起來既不知從何操起,又漏洞百出。
至於原因嘛,理解不夠,實踐不夠是兩條老牌的攔路虎,只能靠自己來克服。還有一個非常有意思且經常被忽視的因素——陷入舉三反一的懵逼狀態。
什麼意思呢?假如我是個旱鴨子,想去學游泳,教練很認真的給我剖析了蛙泳的動作,扶着我的腰讓我在水裡劃拉了5分鐘,接着馬上給我講解了蝶泳,又是劃拉了5分鐘,然後又硬塞給我潛泳的姿勢,依然是劃拉5分鐘。最後,教練一下子把我丟進踩不到底的泳池,給我吶喊助威。
作為一個還沒入門的旱鴨子,教練傾囊授了我3種游泳技巧,讓我分別實踐了5分鐘。這樣做的結果就是我哪一種游泳技巧也沒學會,只學會了喝水。當一個初學者一開始就陷入針對單個問題的多種解決方法,而每一種方法的實踐又淺嘗輒止,在面對具體問題時往往會手忙腳亂。
拿Pandas來說,它的多種構造方式,多種索引方式以及類似效果的多種實現方法,很容易把初學者打入舉三反一的懵逼狀態。所以,盡量避開這個坑也是我寫Pandas基礎系列的初衷,希望通過梳理和精簡知識點的方式,給需要的同學一些啟發。目前暫定整個基礎系列分為4篇,基礎篇過後便是有趣的實戰篇。
下面開始進入正題(我真是太嘮叨了)。
02 Pandas簡介
江湖上流傳着這麼一句話——分析不識潘大師(PANDAS),縱是老手也枉然。
Pandas是基於Numpy的專業數據分析工具,可以靈活高效的處理各種數據集,也是我們後期分析案例的神器。它提供了兩種類型的數據結構,分別是DataFrame和Series,我們可以簡單粗暴的把DataFrame理解為Excel裡面的一張表,而Series就是表中的某一列,後面學習和用到的所有Pandas騷操作,都是基於這些表和列進行的操作(關於Pandas和Excel的形象關係,這裡推薦我的好朋友張俊紅寫的《對比EXCEL,輕鬆學習Python數據分析》)。
這裡有一點需要強調,Pandas和Excel、SQL相比,只是調用和處理數據的方式變了,核心都是對源數據進行一系列的處理,在正式處理之前,更重要的是謀定而後動,明確分析的意義,理清分析思路之後再處理和分析數據,往往事半功倍。
03 創建、讀取和存儲
1、創建
在Pandas中我們想要構造下面這一張表應該如何操作呢?
別忘了,第一步一定是先導入我們的庫——import pandas as pd
構造DataFrame最常用的方式是字典+列表,語句很簡單,先是字典外括,然後依次打出每一列標題及其對應的列值(此處一定要用列表),這裡列的順序並不重要:
左邊是jupyter notebook中dataframe的樣子,如果對應到excel中,他就是右邊表格的樣子,通過改變columns,index和values的值來控制數據。
PS,如果我們在創建時不指定index,系統會自動生成從0開始的索引。
2、 讀取
更多時候,我們是把相關文件數據直接讀進PANDAS中進行操作,這裡介紹兩種非常接近的讀取方式,一種是CSV格式的文件,一種是EXCEL格式(.xlsx和xls後綴)的文件。
讀取csv文件:
engine是使用的分析引擎,讀取csv文件一般指定python避免中文和編碼造成的報錯。而讀取Excel文件,則是一樣的味道:
非常easy,其實read_csv和read_excel還有一些參數,比如header、sep、names等,大家可以做額外了解。實踐中數據源的格式一般都是比較規整的,更多情況是直接讀取。
3、存儲
存儲起來一樣非常簡單粗暴且相似:
04 快速認識數據
這裡以我們的案例數據為例,迅速熟悉查看N行,數據格式概覽以及基礎統計數據。
1、查看數據,掐頭看尾
很多時候我們想要對數據內容做一個總覽,用df.head()函數直接可以查看默認的前5行,與之對應,df.tail()就可以查看數據尾部的5行數據,這兩個參數內可以傳入一個數值來控制查看的行數,例如df.head(10)表示查看前10行數據。
2、 格式查看
df.info()幫助我們一步摸清各列數據的類型,以及缺失情況:
從上面直接可以知道數據集的行列數,數據集的大小,每一列的數據類型,以及有多少條非空數據。
3、統計信息概覽
快速計算數值型數據的關鍵統計指標,像平均數、中位數、標準差等等。
我們本來有5列數據,為什麼返回結果只有兩列?那是因為這個操作只針對數值型的列。其中count是統計每一列的有多少個非空數值,mean、std、min、max對應的分別是該列的均值、標準差、最小值和最大值,25%、50%、75%對應的則是分位數。
05 列的基本處理方式
這裡,我們採用SQL四大法寶的邏輯來簡單梳理針對列的基本處理方式——增、刪、選、改。
溫馨提示:使用Pandas時,盡量避免用行或者EXCEL操作單元格的思維來處理數據,要逐漸養成一種列向思維,每一列是同宗同源,處理起來是嗖嗖的快。
1、增
增加一列,用df[‘新列名’] = 新列值的形式,在原數據基礎上賦值即可:
2、刪:
我們用drop函數制定刪除對應的列,axis = 1表示針對列的操作,inplace為True,則直接在源數據上進行修改,否則源數據會保持原樣。
3、選:
想要選取某一列怎麼辦?df[‘列名’]即可:
選取多列呢?需要用列表來傳遞:df[[‘第一列’,‘第二列’,‘第三列’…]]
4、 改:
好事多磨,複雜的針對特定條件和行列的篩選、修改,放在後面結合案例細講,這裡只講一下最簡單的更改:df[‘舊列名’] = 某個值或者某列值,就完成了對原列數值的修改。
06 常用數據類型及操作
1、字符串
字符串類型是最常用的格式之一了,Pandas中字符串的操作和原生字符串操作幾乎一毛一樣,唯一不同的是需要在操作前加上”.str”。
小Z溫馨提示:我們最初用df2.info()查看數據類型時,非數值型的列都返回的是object格式,和str類型深層機制上的區別就不展開了,在常規實際應用中,我們可以先理解為object對應的就是str格式,int64對應的就是int格式,float64對應的就是float格式即可。
在案例數據中,我們發現來源明細那一列,可能是系統導出的歷史遺留問題,每一個字符串前面都有一個“-”符號,又丑又無用,所以把他給拿掉:
一般來說清洗之後的列是要替換掉原來列的:
2、 數值型
數值型數據,常見的操作是計算,分為與單個值的運算,長度相等列的運算。
以案例數據為例,源數據訪客數我們是知道的,現在想把所有渠道的訪客都加上10000,怎麼操作呢?
只需要選中訪客數所在列,然後加上10000即可,pandas自動將10000和每一行數值相加,針對單個值的其他運算(減乘除)也是如此。
列之間的運算語句也非常簡潔。源數據是包含了訪客數、轉化率和客單價,而實際工作中我們對每個渠道貢獻的銷售額更感興趣。(銷售額 = 訪客數 X 轉化率 X 客單價)
對應操作語句:df[‘銷售額’] = df[‘訪客數’] * df[‘轉化率’] * df[‘客單價’]
但為什麼瘋狂報錯?
導致報錯的原因,是數值型數據和非數值型數據相互計算導致的。PANDAS把帶“%”符號的轉化率識別成字符串類型,我們需要先拿掉百分號,再將這一列轉化為浮點型數據:
要注意的是,這樣操作,把9.98%變成了9.98,所以我們還需要讓支付轉化率除以100,來還原百分數的真實數值:
然後,再用三個指標相乘計算銷售額:
3、時間類型
PANDAS中時間序列相關的水非常深,這裡只對日常中最基礎的時間格式進行講解,對時間序列感興趣的同學可以自行查閱相關資料,深入了解。
以案例數據為例,我們這些渠道數據,是在2019年8月2日提取的,後面可能涉及到其他日期的渠道數據,所以需要加一列時間予以區分,在EXCEL中常用的時間格式是’2019-8-3’或者’2019/8/3’,我們用PANDAS來實現一下:
在實際業務中,一些時候PANDAS會把文件中日期格式的字段讀取為字符串格式,這裡我們先把字符串’2019-8-3’賦值給新增的日期列,然後用to_datetime()函數將字符串類型轉換成時間格式:
轉換成時間格式(這裡是datetime64)之後,我們可以用處理時間的思路高效處理這些數據,比如,我現在想知道提取數據這一天離年末還有多少天(‘2019-12-31’),直接做減法(該函數接受時間格式的字符串序列,也接受單個字符串):
python如何下載pandas
pandas是一個開源的python庫,其強大的數據結構提供高性能數據操作和分析工具
利用pip安裝pandas
1、在cmd窗口輸入pip install pandas
2、在編輯器中輸入import pandas 看看會不會報錯,如不報錯則安裝成功
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257746.html