Python機(jī)器學(xué)習(xí)三大件之二pandas
一、Pandas
2008年WesMcKinney開(kāi)發(fā)出的庫(kù)
專門(mén)用于數(shù)據(jù)挖掘的開(kāi)源python庫(kù)
以Numpy為基礎(chǔ),借力Numpy模塊在計(jì)算方面性能高的優(yōu)勢(shì)
基于matplotlib,能夠簡(jiǎn)便的畫(huà)圖
獨(dú)特的數(shù)據(jù)結(jié)構(gòu)
二、數(shù)據(jù)結(jié)構(gòu)
- Pandas中一共有三種數(shù)據(jù)結(jié)構(gòu),分別為:Series、DataFrame和MultiIndex。
三、Series
Series是一個(gè)類似于一維數(shù)組的數(shù)據(jù)結(jié)構(gòu),它能夠保存任何類型的數(shù)據(jù),比如整數(shù)、字符串、浮點(diǎn)數(shù)等,主要由一組數(shù)據(jù)和與之相關(guān)的索引兩部分構(gòu)成。

- Series的創(chuàng)建
import pandas as pd pd.Series(np.arange(3))
0 0
1 1
2 2
dtype: int64
#指定索引 pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])
1 6.7
2 5.6
3 3.0
4 10.0
5 2.0
dtype: float64
#通過(guò)字典數(shù)據(jù)創(chuàng)建
color_count = pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})
color_count
blue 200
green 500
red 100
yellow 1000
dtype: int64
- Series的屬性
color_count.index color_count.values
也可以使用索引來(lái)獲取數(shù)據(jù):
color_count[2]
100
- Series排序
data[‘p_change'].sort_values(ascending=True) # 對(duì)值進(jìn)行排序
data[‘p_change'].sort_index() # 對(duì)索引進(jìn)行排序
#series排序時(shí),只有一列,不需要參數(shù)
四、DataFrame
創(chuàng)建
pd.DataFrame(np.random.randn(2,3))

score = np.random.randint(40, 100, (10, 5)) score
array([[92, 55, 78, 50, 50],
[71, 76, 50, 48, 96],
[45, 84, 78, 51, 68],
[81, 91, 56, 54, 76],
[86, 66, 77, 67, 95],
[46, 86, 56, 61, 99],
[46, 95, 44, 46, 56],
[80, 50, 45, 65, 57],
[41, 93, 90, 41, 97],
[65, 83, 57, 57, 40]])
但是這樣的數(shù)據(jù)形式很難看到存儲(chǔ)的是什么的樣的數(shù)據(jù),可讀性比較差??!
# 使用Pandas中的數(shù)據(jù)結(jié)構(gòu) score_df = pd.DataFrame(score)

- DataFrame的屬性
data.shape
data.index
data.columns
data.values
data.T
data.head(5)
data.tail(5)
data.reset_index(keys, drop=True)
keys : 列索引名成或者列索引名稱的列表
drop : boolean, default True.當(dāng)做新的索引,刪除原來(lái)的列
- dataframe基本數(shù)據(jù)操作
data[‘open'][‘2018-02-27'] # 直接使用行列索引名字的方式(先列后行)
data.loc[‘2018-02-27':‘2018-02-22', ‘open'] # 使用loc:只能指定行列索引的名字
data.iloc[:3, :5 ]# 使用iloc可以通過(guò)索引的下標(biāo)去獲取
data.sort_values(by=“open”, ascending=True) #單個(gè)排序
data.sort_values(by=[‘open', ‘high']) # 按照多個(gè)鍵進(jìn)行排序
data.sort_index() # 對(duì)索引進(jìn)行排序
DataFrame運(yùn)算
應(yīng)用add等實(shí)現(xiàn)數(shù)據(jù)間的加、減法運(yùn)算
應(yīng)用邏輯運(yùn)算符號(hào)實(shí)現(xiàn)數(shù)據(jù)的邏輯篩選
應(yīng)用isin, query實(shí)現(xiàn)數(shù)據(jù)的篩選
使用describe完成綜合統(tǒng)計(jì)
使用max, min, mean, std完成統(tǒng)計(jì)計(jì)算
使用idxmin、idxmax完成最大值最小值的索引
使用cumsum等實(shí)現(xiàn)累計(jì)分析
應(yīng)用apply函數(shù)實(shí)現(xiàn)數(shù)據(jù)的自定義處理
五、pandas.DataFrame.plot
DataFrame.plot(kind=‘line')
kind : str,需要繪制圖形的種類
‘line' : line plot (default)
‘bar' : vertical bar plot
‘barh' : horizontal bar plot
關(guān)于“barh”的解釋:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.barh.html
‘hist' : histogram
‘pie' : pie plot
‘scatter' : scatter plot
六、缺失值處理
isnull、notnull判斷是否存在缺失值
np.any(pd.isnull(movie)) # 里面如果有一個(gè)缺失值,就返回True
np.all(pd.notnull(movie)) # 里面如果有一個(gè)缺失值,就返回False
dropna刪除np.nan標(biāo)記的缺失值
movie.dropna()
fillna填充缺失值
movie[i].fillna(value=movie[i].mean(), inplace=True)
replace替換
wis.replace(to_replace="?", value=np.NaN)
七、數(shù)據(jù)離散化
p_change= data['p_change'] # 自行分組,每組個(gè)數(shù)差不多 qcut = pd.qcut(p_change, 10) # 計(jì)算分到每個(gè)組數(shù)據(jù)個(gè)數(shù) qcut.value_counts()
# 自己指定分組區(qū)間 bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100] p_counts = pd.cut(p_change, bins)
得出one-hot編碼矩陣
dummies = pd.get_dummies(p_counts, prefix="rise") #prefix:分組名字前綴
八、數(shù)據(jù)合并
pd.concat([data1, data2], axis=1)
按照行或列進(jìn)行合并,axis=0為列索引,axis=1為行索引pd.merge(left, right, how=‘inner', on=None)
可以指定按照兩組數(shù)據(jù)的共同鍵值對(duì)合并或者左右各自
left: DataFrame
right: 另一個(gè)DataFrame
on: 指定的共同鍵
how:按照什么方式連接
九、交叉表與透視表
交叉表:計(jì)算一列數(shù)據(jù)對(duì)于另外一列數(shù)據(jù)的分組個(gè)數(shù) 透視表:指定某一列對(duì)另一列的關(guān)系
#通過(guò)交叉表找尋兩列數(shù)據(jù)的關(guān)系 count = pd.crosstab(data['week'], data['posi_neg']) #通過(guò)透視表,將整個(gè)過(guò)程變成更簡(jiǎn)單一些 data.pivot_table(['posi_neg'], index='week')
十、數(shù)據(jù)聚合
count = starbucks.groupby(['Country']).count() col.groupby(['color'])['price1'].mean() #拋開(kāi)聚合談分組,無(wú)意義
到此這篇關(guān)于Python機(jī)器學(xué)習(xí)三大件之二pandas的文章就介紹到這了,更多相關(guān)Python pandas內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用python Pandas實(shí)現(xiàn)批量拆分Excel與合并Excel
- 解決python3安裝pandas出錯(cuò)的問(wèn)題
- Python Pandas知識(shí)點(diǎn)之缺失值處理詳解
- Python基礎(chǔ)之pandas數(shù)據(jù)合并
- python基于Pandas讀寫(xiě)MySQL數(shù)據(jù)庫(kù)
- python pandas合并Sheet,處理列亂序和出現(xiàn)Unnamed列的解決
- python 使用pandas同時(shí)對(duì)多列進(jìn)行賦值
- Python3 pandas.concat的用法說(shuō)明
- python pandas模糊匹配 讀取Excel后 獲取指定指標(biāo)的操作
- Python數(shù)據(jù)分析之pandas讀取數(shù)據(jù)
相關(guān)文章
詳談Spring是否支持對(duì)靜態(tài)方法進(jìn)行Aop增強(qiáng)
這篇文章主要介紹了Spring是否支持對(duì)靜態(tài)方法進(jìn)行Aop增強(qiáng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Cloud Stream分區(qū)分組原理圖解
這篇文章主要介紹了Spring Cloud Stream的分區(qū)和分組,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
SpringBoot整合FreeMarker的過(guò)程詳解
FreeMarker 是一個(gè)模板引擎,可以將模板與數(shù)據(jù)結(jié)合生成文本輸出,本文給大家介紹SpringBoot整合FreeMarker的過(guò)程,感興趣的朋友一起看看吧2024-01-01
Java下SpringBoot創(chuàng)建定時(shí)任務(wù)詳解
這篇文章主要介紹了Java下SpringBoot創(chuàng)建定時(shí)任務(wù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
將RestTemplate的編碼格式改為UTF-8,防止亂碼問(wèn)題
這篇文章主要介紹了將RestTemplate的編碼格式改為UTF-8,防止亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05

