『壹』 彩色折線散點圖python怎麼指定數據
一、導包
二、繪制簡單折線
1、在利用pandas模塊進行操作前,可以先引入這個模塊,如下:
2、讀取Excel文件的兩種方式:
三、pandas操作Excel的行列
1、讀取指定的單行,數據會存在列表裡面
2、讀取指定的多行,數據會存在嵌套的列表裡面
3、讀取指定的行列
4、讀取指定的多行多列值
5、獲取所有行的指定列
6、獲取行號並列印輸出
7、獲取列名並列印輸出
8、獲取指定行數的值
四、pandas處理Excel數據成為字典
五、繪制簡單折線圖
六、繪制簡單散點圖
使用scatter繪制散點圖並設置其樣式
1、繪制單個點,使用函數scatter,並向它傳遞x,y坐標,並可使用參數s指定點的大小
2、繪制一系列點,向scatter傳遞兩個分別包含x值和y值的列表
3、設置坐標軸的取值范圍:函數axis()要求提供四個值,x,y坐標軸的最大值和最小值
4、使用參數edgecolor在函數scatter中設置數據點的輪廓
5、向scatter傳遞參數c,指定要使用的顏色
6、使用顏色映射
7、自動保存圖表:使用函數plt.savefig()
8、設置繪圖窗口尺寸
9、實常式序
『貳』 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之Series與DataFrame
19.1安裝Anaconda
Anaconda是Python的一個開源發行版本,它預裝了豐富的第三方庫,而且主要面向科學計算和數據分析,使用起來要比原版的Python更省時省力。
Anaconda官方下載網址為:https://www.continuum.io/downloads。下載和安裝的方法很簡單,若有問題可以在網上搜索相關內容學習解決。
安裝Anaconda之後,就會發現在Anaconda目錄下同時安裝了Jupyter Notebook、Spyder等工具,我們接下來主要使用Spyder進行開發。關於Spyder的使用方法非常簡單,大家也可以去網上搜索學習。
雖然Anaconda已經預裝了很多常用的包,但有時我們也需要自己安裝一些包。可以在開始菜單中選擇「Anaconda Anaconda Prompt」命令,在命令行輸入conda install ( 代表包名)即可安裝,也可以輸入pip install 。
19.2數據分析包Pandas
Pandas是Python的一個數據分析包,Anaconda安裝時已經附帶安裝了Pandas包。
Pandas數據結構有三種:Series(一維數組)、DataFrame(二維數組)和Panel(三維數組),其中最常用的是前兩種數據結構。
19.2.1 Series
Series(序列)用於存儲一行或一列數據,以及與之相關的索引的集合。
語法格式如下:
Series([數據1,數據2,......], index=[索引1,索引2,......])
例:
from pandas import Series
s=Series(['張三','李四','王五'],index=[1,2,3])
print(s)
輸出結果如下:
1 張三
2 李四
3 王五
dtype: object
上面建立序列時指定了索引,若不指定,則默認的索引值從0開始。如下:
s=Series(['張三','李四','王五'])
輸出結果為:
0 張三
1 李四
2 王五
dtype: object
索引值也可以為字元串。如下:
from pandas import Series
s=Series(['張三','李四','王五'],index=['A','B','C'])
print(s)
輸出結果為:
A 張三
B 李四
C 王五
dtype: object
1、訪問序列
(1)可以通過索引訪問序列,如:
from pandas import Series
s=Series(['張三','李四','王五'])
print(s)
print(s[0])
print(s[1:])
運行結果如下:
0 張三
1 李四
2 王五
dtype: object #print(s)輸出
張三 #print(s[0])輸出
1 李四
2 王五
dtype: object #print(s[1:])輸出
(2)通過值獲取索引值
from pandas import Series
s=Series(['張三','李四','王五'],index=['A','B','C'])
print(s.index[s.values=='李四'])
運行結果:
Index(['B'], dtype='object')
(3)判斷值是否存在
from pandas import Series
s=Series(['張三','李四','王五'],index=['A','B','C'])
f='李四' in s.values
print(f)
運行結果:
True
(4)定位獲取
from pandas import Series
s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])
print(s[[0,2,1]])
運行結果:
A 張三
C 王五
B 李四
dtype: object
2、修改序列
(1)追加序列,如:
from pandas import Series
s=Series(['張三','李四','王五'],index=['A','B','C'])
s1=Series(['孫六'],index=['D'])
s=s.append(s1)
print(s)
運行結果:
A 張三
B 李四
C 王五
D 孫六
dtype: object
(2)修改序列的值
from pandas import Series
s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])
s[1]='李飛'
print(s)
運行結果:
A 張三
B 李飛
C 王五
D 孫六
dtype: object
不知道索引,僅知道要修改的值,也可通過值查找到索引後,再修改序列的值。如:
s[s.index[s.values=='李四']]='李飛'
這樣也可以將「李四」修改為「李飛。
(3)修改索引
from pandas import Series
s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])
s.index=[0,1,2,3]
print(s)
運行結果:
0 張三
1 李四
2 王五
3 孫六
dtype: object
(4)刪除元素
from pandas import Series
s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])
s=s.drop('A')
print(s)
運行結果:
B 李四
C 王五
D 孫六
dtype: object
(5)重新排序
可以按照索引排序,使用sort_index(ascending=True)方法對index進行排序操作。
from pandas import Series
s=Series(['張三','李四','王五','孫六'],index=['A','B','C','D'])
s=s.sort_index(ascending=False) # ascending=False表示按降序排列
print(s)
運行結果:
D 孫六
C 王五
B 李四
A 張三
dtype: object
(6)重置索引
重置索引可以使用reindex()。如果index列表中的元素多於序列的值,可用fill_value=0這樣的語句填充。
s=s.reindex(['D','C','B','A'])
如果index列表中的元素多於序列的值,可用fill_value=0這樣的語句填充。
s=s.reindex(['D','C','B','A'], fill_value=0)
19.2.2 DataFrame
DataFrame(數據框架)用於存儲多行和多列的數據集合。它是Series的容器,類似於Excel中二維表格。
定義一個DataFrame的語法格式如下:
df=DataFrame({列名1 : 序列1,列名2 : 序列2,.......列名n : 序列n}, index=序列 )
例如,有如下二維表:
姓名
性別
年齡
張三
男
18
李四
女
19
王五
男
17
保存到DataFrame中可以用如下方法:
from pandas import Series
from pandas import DataFrame
name=Series(['張三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性別':sex,'年齡':age})
print(df)
運行結果:
姓名 性別 年齡
0 張三 男 18
1 李四 女 19
2 王五 男 17
從上例可以看出,雖然我們省缺了索引,但系統自動添加了從0開始的索引值。
19.3 DataFrame的基本操作
1、訪問方式
(1)獲取行
print(df[1:2]) # 獲取第1行的值
輸出結果:
姓名 性別 年齡
1 李四 女 19
print(df[1:3]) #獲取第1行到第2行的值
輸出結果:
姓名 性別 年齡
1 李四 女 19
2 王五 男 17
(2)獲取列
print(df['姓名']) #獲取「姓名」列的值
輸出結果:
0 張三
1 李四
2 王五
Name: 姓名, dtype: object
另一種方法:
print(df[df.columns[0:1]]) #先按照索引號獲取列名,再按照列名讀取
輸出結果和上面的方法完全一致。
還有一種情況,是獲取唯一值,即將列內的重復值中多餘的刪除,僅留下互不相同的值。所用的到方法是unique()。
sex1=Series(df['性別'].unique())
print(sex1)
輸出結果:
0 男
1 女
dtype: object
(3)獲取指定位置的值
print(df.at[1,'姓名']) # 格式為變數名.at[行號,列名]
輸出結果:
李四
(4)獲取塊的值
print(df.iloc[0:2,1:3]) # 格式為變數名.iloc[行號1:行號2, 列號1:列號2]
輸出結果:
性別 年齡
0 男 18
1 女 19
print(df.iloc[:,1:2]) #獲取「性別」列的值
運行結果:
性別
0 男
1 女
2 男
2、修改、刪除、增加行和列
(1)修改列名
print(df.columns)
df.columns=['name','sex','age']
print(df.columns)
輸出結果:
Index(['姓名', '性別', '年齡'], dtype='object')
Index(['name', 'sex', 'age'], dtype='object')
可見,列名已經由「姓名、性別、年齡」修改為「age、sex、age」了。但這種修改必須把全部列名都一一列舉,不能有遺漏,否則就會出錯。如:
df.columns=['name','sex']
此時會報錯:ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements。
(2)修改行索引
df.index=[1,2,3]
(3)刪除行
df.drop(1,axis=0) # axis=0表示行軸,也可以省略
(4)刪除列
df.drop(『性別』,axis=1) # axis=0表示列軸
也可以使用另一種方法:
del df['性別']
(5)增加列
df['電話']=[',',']
print(df)
運行結果:
姓名 性別 年齡 電話
0 張三 男 18 1111111
1 李四 女 19 2222222
2 王五 男 17 3333333
(6)增加行
df.loc[len(df)]=['孫六','男',ཐ']
(7)追加
from pandas import Series
from pandas import DataFrame
name=Series(['張三','李四','王五'])
sex=Series(['男','女','男'])
age=Series([18,19,17])
df=DataFrame({'姓名':name,'性別':sex,'年齡':age}) # 建立DataFrame,變數名為df
name1=Series(['孫六','候七'])
sex1=Series(['男','女'])
age1=Series([19,17])
df1=DataFrame({'姓名':name1,'性別':sex1,'年齡':age1})
# 建立DataFrame,變數名為df1
df=df.append(df1,ignore_index=True)
# 將對df1追加到df後面,參數ignore_index=True表示重新索引
print(df)
運行結果:
姓名 性別 年齡
0 張三 男 18
1 李四 女 19
2 王五 男 17
3 孫六 男 19
4 候七 女 17
『肆』 pandas繪圖不顯示
可以顯示啊,不能顯示的圖形是坐標超出范圍了,你可以在PicDRAW上查看坐標!
把圖片控制項的AutoReDraw設為True可以顯示 Form_Load()
中的圖形,以及以後來窗體刷新時圖形不丟失。
『伍』 如何使用Python繪制餅圖
我們在運用Python製作各種圖形的時候,經常需要繪制餅圖。那麼如何用Python繪制餅圖呢?下面我給大家分享演示一下。
Pycharm
首先我們需要在Excel文件中准備好餅圖的數據,如下圖所示
接下來我們打開Pycharm,新建Python文件,導入Python的pandas庫,利用pandas將Excel數據載入到緩存中,如下圖所示
然後我們在導入pyplot庫,運用pyplot庫的pie進行餅圖的繪制,如下圖所示
接著運行程序以後我們就可以看到一張如下圖所示的餅圖了,但是四周的名稱和Excel中的還是不太一樣,接下來修改四周的名稱
我們在運用pandas庫載入Excel數據文件的時候加上index_col屬性即可,如下圖所示
這次在運行程序我們就可以看到餅圖四周的名稱和Excel中的一樣了,如下圖所示
接著我們在運用pyplot中的title和ylable設置餅圖的標題和Y坐標軸的名稱,如下圖所示
最後運行文件就可以看到下面這個信息比較齊全的餅圖了,如下圖所示,到這里用Python繪制餅圖就結束了
『陸』 用Python畫圖
今天開始琢磨用Python畫圖,沒使用之前是一臉懵的,我使用的開發環境是Pycharm,這個輸出的是一行行命令,這個圖畫在哪裡呢?
搜索之後發現,它會彈出一個對話框,然後就開始畫了,比如下圖
第一個常用的庫是Turtle,它是Python語言中一個很流行的繪制圖像的函數庫,這個詞的意思就是烏龜,你可以想像下一個小烏龜在一個x和y軸的平面坐標系裡,從原點開始根據指令控制,爬行出來就是繪制的圖形了。
它最常用的指令就是旋轉和移動,比如畫個圓,就是繞著圓心移動;再比如上圖這個怎麼畫呢,其實主要就兩個命令:
turtle.forward(200)
turtle.left(170)
第一個命令是移動200個單位並畫出來軌跡
第二個命令是畫筆順時針轉170度,注意此時並沒有移動,只是轉角度
然後呢? 循環重復就畫出來這個圖了
好玩吧。
有需要仔細研究的可以看下這篇文章 https://blog.csdn.net/zengxiantao1994/article/details/76588580 ,這個牛人最後用這個庫畫個移動的鍾表,太贊了。
Turtle雖好玩,但是我想要的是我給定數據,然後讓它畫圖,這里就找到另一個常用的畫圖的庫了。
Matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地行制圖。其中,matplotlib的pyplot模塊一般是最常用的,可以方便用戶快速繪制二維圖表。
使用起來也挺簡單,
首先import matplotlib.pyplot as plt 導入畫圖的圖。
然後給定x和y,用這個命令plt.plot(x, y)就能畫圖了,接著用plt.show()就可以把圖形展示出來。
接著就是各種完善,比如加標題,設定x軸和y軸標簽,范圍,顏色,網格等等,在 https://blog.csdn.net/guoziqing506/article/details/78975150 這篇文章里介紹的很詳細。
現在互聯網的好處就是你需要什麼內容,基本上都能搜索出來,而且還是免費的。
我為什麼要研究這個呢?當然是為了用,比如我把比特幣的曲線自己畫出來可好?
假設現在有個數據csv文件,一列是日期,另一列是比特幣的價格,那用這個命令畫下:
這兩列數據讀到pandas中,日期為df['time']列,比特幣價格為df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下圖:
自己畫的是不是很香,哈哈!
然後呢,我在上篇文章 https://www.jianshu.com/p/d4013d8a73de 中介紹過求Ahr999指數,那可不可以也放到這張圖中呢?不就是加一條命令嘛
plt.plot(df['time'], df['Ahr999'])
圖形如下:
但是,Ahr999指數怎麼就一條線不動啊, 原來兩個Y軸不一致,顯示出來太怪了,需要用多Y軸,問題來了。
繼續谷歌一下,把第二個Y軸放右邊就行了,不過呢得使用多圖,重新繪制
fig = plt.figure() # 多圖
ax1 = fig.add_subplot(111)
ax1.plot(df['time'], df['ini'], label="BTC price") # 繪制第一個圖比特幣價格
ax1.set_ylabel('BTC price') # 加上標簽
# 第二個直接對稱就行了
ax2 = ax1.twinx()# 在右邊增加一個Y軸
ax2.plot(df['time'], df['Ahr999'], 'r', label="ahr999") # 繪制第二個圖Ahr999指數,紅色
ax2.set_ylim([0, 50])# 設定第二個Y軸范圍
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 網格
fig.legend(loc="center")#圖例
plt.show()
跑起來看看效果,雖然丑了點,但終於跑通了。
這樣就可以把所有指數都繪制到一張圖中,等等,三個甚至多個Y軸怎麼加?這又是一個問題,留給愛思考愛學習的你。
有了自己的數據,建立自己的各個指數,然後再放到圖形界面中,同時針對異常情況再自動進行提醒,比如要抄底了,要賣出了,用程序做出自己的晴雨表。
『柒』 如何使用Python的Pandas庫繪制折線圖
我們經常會使用Python的Pandas繪制各種數據圖形,那麼如何使用它繪制折線圖呢?下面我給大家分享一下。
Pycharm
首先我們需要打開Excel軟體准備需要的數據,這里多准備幾列數據,一列就是一條折線,如下圖所示
然後我們打開Pycharm軟體,新建Python文件,導入Pandas庫,接著將Excel中的數據讀取進數據集緩存,如下圖所示
接下來我們利用plot方法繪制折線圖,如下圖所示,這里只添加了一列標題
運行文件以後我們就可以看到折線圖顯示出來了,但是比較的簡單,下面我們逐漸的豐富它
然後在plot方法中將excel裡面的多列標題都添加進來,如下圖所示
這次在運行文件的時候我們就可以看到折線圖上有多條線了,如下圖所示
接下來我們在為折線圖設置標題,X,Y坐標軸的內容,如下圖所示
然後通過plot方法下面的area方法對折線圖的空白區域進行疊加填充,如下圖所示
最後我們運行完善好後的文件,就可以看到如下圖所示的折線圖了,到此我們的折線圖繪制也就完成了
『捌』 Python pandas用法
在Python中,pandas是基於NumPy數組構建的,使數據預處理、清洗、分析工作變得更快更簡單。pandas是專門為處理表格和混雜數據設計的,而NumPy更適合處理統一的數值數組數據。
使用下面格式約定,引入pandas包:
pandas有兩個主要數據結構:Series和DataFrame。
Series是一種類似於一維數組的對象,它由 一組數據 (各種NumPy數據類型)以及一組與之相關的 數據標簽(即索引) 組成,即index和values兩部分,可以通過索引的方式選取Series中的單個或一組值。
pd.Series(list,index=[ ]) ,第二個參數是Series中數據的索引,可以省略。
Series類型索引、切片、運算的操作類似於ndarray,同樣的類似Python字典類型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之間的主要區別在於Series之間的操作會根據索引自動對齊數據。
DataFrame是一個表格型的數據類型,每列值類型可以不同,是最常用的pandas對象。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)。DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index為指定的列、行索引,並按照順序排列。
如果創建時指定了columns和index索引,則按照索引順序排列,並且如果傳入的列在數據中找不到,就會在結果中產生缺失值:
數據索引 :Series和DataFrame的索引是Index類型,Index對象是不可修改,可通過索引值或索引標簽獲取目標數據,也可通過索引使序列或數據框的計算、操作實現自動化對齊。索引類型index的常用方法:
重新索引 :能夠改變、重排Series和DataFrame索引,會創建一個新對象,如果某個索引值當前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, ) :index/columns為新的行列自定義索引;fill_value為用於填充缺失位置的值;method為填充方法,ffill當前值向前填充,bfill向後填充;limit為最大填充量; 默認True,生成新的對象,False時,新舊相等不復制。
刪除指定索引 :默認返回的是一個新對象。
.drop() :能夠刪除Series和DataFrame指定行或列索引。
刪除一行或者一列時,用單引號指定索引,刪除多行時用列表指定索引。
如果刪除的是列索引,需要增加axis=1或axis='columns'作為參數。
增加inplace=True作為參數,可以就地修改對象,不會返回新的對象。
在pandas中,有多個方法可以選取和重新組合數據。對於DataFrame,表5-4進行了總結
適用於Series和DataFrame的基本統計分析函數 :傳入axis='columns'或axis=1將會按行進行運算。
.describe() :針對各列的多個統計匯總,用統計學指標快速描述數據的概要。
.sum() :計算各列數據的和
.count() :非NaN值的數量
.mean( )/.median() :計算數據的算術平均值、算術中位數
.var()/.std() :計算數據的方差、標准差
.corr()/.cov() :計算相關系數矩陣、協方差矩陣,是通過參數對計算出來的。Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關系數。DataFrame的corr和cov方法將以DataFrame的形式分別返回完整的相關系數或協方差矩陣。
.corrwith() :利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關系數。傳入一個Series將會返回一個相關系數值Series(針對各列進行計算),傳入一個DataFrame則會計算按列名配對的相關系數。
.min()/.max() :計算數據的最小值、最大值
.diff() :計算一階差分,對時間序列很有效
.mode() :計算眾數,返回頻數最高的那(幾)個
.mean() :計算均值
.quantile() :計算分位數(0到1)
.isin() :用於判斷矢量化集合的成員資格,可用於過濾Series中或DataFrame列中數據的子集
適用於Series的基本統計分析函數,DataFrame[列名]返回的是一個Series類型。
.unique() :返回一個Series中的唯一值組成的數組。
.value_counts() :計算一個Series中各值出現的頻率。
.argmin()/.argmax() :計算數據最大值、最小值所在位置的索引位置(自動索引)
.idxmin()/.idxmax() :計算數據最大值、最小值所在位置的索引(自定義索引)
pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數。下表對它們進行了總結,其中read_csv()、read_table()、to_csv()是用得最多的。
在數據分析和建模的過程中,相當多的時間要用在數據准備上:載入、清理、轉換以及重塑。
在許多數據分析工作中,缺失數據是經常發生的。對於數值數據,pandas使用浮點值NaN(np.nan)表示缺失數據,也可將缺失值表示為NA(Python內置的None值)。
替換值
.replace(old, new) :用新的數據替換老的數據,如果希望一次性替換多個值,old和new可以是列表。默認會返回一個新的對象,傳入inplace=True可以對現有對象進行就地修改。
刪除重復數據
利用函數或字典進行數據轉換
df.head():查詢數據的前五行
df.tail():查詢數據的末尾5行
pandas.cut()
pandas.qcut() 基於分位數的離散化函數。基於秩或基於樣本分位數將變數離散化為等大小桶。
pandas.date_range() 返回一個時間索引
df.apply() 沿相應軸應用函數
Series.value_counts() 返回不同數據的計數值
df.aggregate()
df.reset_index() 重新設置index,參數drop = True時會丟棄原來的索引,設置新的從0開始的索引。常與groupby()一起用
numpy.zeros()
『玖』 如何利用Python中的Pandas庫繪制柱形圖
我們利用Python的Pandas庫可以繪制很多圖形,那麼如何繪制柱形圖呢?下面我給大家分享演示一下。
Pycharm
首先我們打開Excel文件,准備要生成柱形圖的數據表,如下圖所示
接下來在Python文件中導入pandas庫,然後將Excel文件載入到緩存對象中,如下圖所示
然後我們導入matplotlib下面的pyplot庫,如下圖所示,導入以後給它起一個別名
接下來我們通過pandas庫下面的bar來設置柱形圖的X,Y坐標軸,如下圖所示
然後通過pyplot的show方法將柱形圖進行展示出來,如下圖所示
接下來運行程序以後我們就看到柱形圖生成出來了,如下圖所示
然後如果我們想將柱形圖中的數據排序的話可以利用sort_values實現,如下圖所示
最後運行排序好後的程序,我們就可以看到柱形圖中的數據已經排序好了,如下圖所示
『拾』 python(pandas模塊)
Pandas是Python的一個數據分析包,最初由AQR Capital
Management於2008年4月開發,並於2009年底開源出來,目前由專注於Python數據包開發的Pydata開發team繼續開發和維護,屬於PyData項目的一部分,pandas最初被作為金融數據分析工具而開發出來,因此pandas為時間序列分析提供了很好的支持。
Pandas的名稱來自於面板數據和python數據分析。panel
data是經濟學中關於多維數據集的一個術語,在Pandas中也提供了panel的數據類型。
Pandas數據結構:
Series:一維數組,與numpy中的一維array類似。二者與Python基本的數據結構list相近,Series如今能保存不同種數據類型,字元串、boolean值、數字等都能保存在series中。
Time-series:以時間為索引的series。
DataFrame:二維的表格型數據結構,很多功能與R中的data.frame類似,可以將DataFrame理解為Series的容器。
Panel :三維的數組,可以理解為DataFrame的容器。
Panel4D:是像Panel一樣的4維數據容器。
PanelND:擁有factory集合,可以創建像Panel4D一樣N維命名容器的模塊。