摘要:前言在數(shù)據(jù)分析和建模之前需要審查數(shù)據(jù)是否滿足數(shù)據(jù)處理應用的要求,以及對數(shù)據(jù)進行清洗,轉(zhuǎn)化,合并,重塑等一系列規(guī)整化處理。通過數(shù)據(jù)信息查看可知數(shù)據(jù)中存在缺失值,比如各存在個,各存在個。
前言
在數(shù)據(jù)分析和建模之前需要審查數(shù)據(jù)是否滿足數(shù)據(jù)處理應用的要求,以及對數(shù)據(jù)進行清洗,轉(zhuǎn)化,合并,重塑等一系列規(guī)整化處理。pandas標準庫提供了高級靈活的方法,能夠輕松地將數(shù)據(jù)規(guī)整化為正確的形式,本文通過例程介紹使用pandas庫從獲取數(shù)據(jù)到最終數(shù)據(jù)重塑的方法。
數(shù)據(jù)文件獲取Pandas庫提供專門處理csv文件的方法read_csv(),具體可參考《Pandas庫基礎分析——CSV文件加載和存儲》中的Pandas庫讀寫CSV文件章節(jié)。
數(shù)據(jù)信息查看當數(shù)據(jù)量較大時,將數(shù)據(jù)所有信息輸出到控制臺中會顯得過于冗雜,可通過查看部分數(shù)據(jù)信息,簡要了解數(shù)據(jù)的特性。
(1)查看數(shù)據(jù)前5行和尾部倒數(shù)5行數(shù)據(jù),列名和索引信息,數(shù)據(jù)行列形狀
print df_csvload.head()#查看前幾行 print df_csvload.tail()#查看后幾行 print df_csvload.columns#查看列名 print df_csvload.index#查看索引 print df_csvload.shape#查看形狀
(2)查看各列數(shù)據(jù)描述性統(tǒng)計信息,如最小值、最大值、均值、標準差等
print df_csvload.describe()#查看各列數(shù)據(jù)描述性統(tǒng)計
(3)查看數(shù)據(jù)是否有缺失及每列數(shù)據(jù)的類型
print df_csvload.info()#查看缺失及每列數(shù)據(jù)類型缺失值處理
對Pandas做數(shù)據(jù)時不可避免會因為一些原因出現(xiàn)缺失值NaN(Not a number),比如兩個DataFrame對象進行運算時對于無法匹配的位置就會出現(xiàn)缺失值。通過數(shù)據(jù)信息查看可知數(shù)據(jù)中存在缺失值,比如dataA、dataC、dataE各存在2個NaN,dataB、dataD、各存在1個NaN。
(1)Pandas包中isnull()和notnull()方法用于判斷數(shù)據(jù)是否為缺失值,若是缺失值則isnull()返回值為True,notnull()返回值為False。
print df_csvload.isnull()#判斷數(shù)據(jù)缺失值
(2)由于isnull()和notnull()方法判斷缺失值生成的是所有數(shù)據(jù)的True/False矩陣,對于龐大的Dataframe數(shù)據(jù),很難一眼看出缺失值位置,可在df_csvload.isnull()矩陣基礎上結(jié)合數(shù)據(jù)轉(zhuǎn)置方法.T和篩選滿足True值條件列方法.any(),查找出含有NaN值所在的行。
print df_csvload[df_csvload.isnull().T.any().T]#查看NAN值所在行
(3)對缺失值的處理的方法有刪除和填充,此處通過DataFrame.dropna()方法將所有值都為缺失值的行刪除,DataFrame.fillna()方法在列方向上對缺失值前值填充。
df_csvload = df_csvload.dropna(axis=0,how="all")#NAN值刪除 行所有為NAN刪除 df_csvload.fillna(method="ffill",axis=0,inplace=True)#NAN值填充 列方向前值填充 print df_csvload[df_csvload.isnull().values==True]#查看NAN值刪除填充后值特殊值處理
(1)查看各列數(shù)據(jù)描述性統(tǒng)計信息時發(fā)現(xiàn)“Flow”列最小值為0值,查找出0值具體位置后用“Flow”列通過中位值填充0值
注:loc為通過行和列的標簽名提取相應數(shù)據(jù),iloc為通過位置提取特定的數(shù)據(jù),而ix為標簽和位置索引混合的方式切片數(shù)據(jù)
print df_csvload[df_csvload.values==0]#查看所有0值的元素 print df_csvload[df_csvload.Flow.isin([0])]#查看指定列0值 df_csvload.loc[df_csvload.loc[:,"Flow"]==0,"Flow"] = df_csvload.Flow.median()#中位值替換0值
(2)查看各列數(shù)據(jù)值時發(fā)現(xiàn)“dateE”列數(shù)據(jù)精度保留了6位小數(shù),而“Flow”列數(shù)據(jù)精度保留了1位小數(shù),此處將“dateE”列數(shù)據(jù)的精度更改為2位小數(shù),將“Flow”列數(shù)據(jù)轉(zhuǎn)化為整數(shù),以便于顯示和運算。
df_csvload = df_csvload.round(2)#保留2位小數(shù) df_csvload.Flow = df_csvload.Flow.astype(int)#轉(zhuǎn)換為整數(shù)數(shù)據(jù)運算轉(zhuǎn)化
(1)篩選出“Flow”列值大于該列均值的行,并只提取出所需的“date”列數(shù)據(jù)用于后續(xù)的運算。(可使用&、|符號實現(xiàn)多條件篩選)
new_df = df_csvload[["dataA","dataB","dataC","dataD"]][(df_csvload.Flow>df_csvload.Flow.mean())]
(2)通過apply()方法作用于DataFrame的行,計算出new_df每行數(shù)值最大與最小值之差,以及每行數(shù)值與平均值之差。
max_min_df = new_df.apply((lambda x:x.max() - x.min()),axis = 1)#計算橫軸最大最小值之差 err_mean_df = new_df.apply((lambda x:x-x.mean()),axis = 1)#計算橫軸數(shù)值與平均值之差
也可分別計算new_df中每列數(shù)值與mean_df均值的誤差。Pandas中Series與Series之間通過index匹配運算(加減乘除),同理Series與DataFrame之間是Series的index與DataFrame的columns之間匹配,運算的方式是將DataFrame每一行都與Series進行匹配運算,DataFrame之間則同時對index與columns進行匹配成功的元素進行運算,當以上類型出現(xiàn)無法匹配時用NaN進行填充。
mean_df = new_df.apply((lambda x:x.mean()),axis = 1)#計算橫軸平均值 dataA_df = new_df.dataA - mean_df#計算誤差 dataB_df = new_df.dataB - mean_df#計算誤差 dataC_df = new_df.dataC - mean_df#計算誤差 dataD_df = new_df.dataD - mean_df#計算誤差
(3)applymap()方法作用于DataFrame元素級,此處將err_mean_df數(shù)值轉(zhuǎn)換為真值矩陣
err_mean_df = err_mean_df.applymap(lambda x: True if(x>0) else False)# 大于零為True 小于零為False數(shù)據(jù)合并及連接
pandas提供了三種方式實現(xiàn)數(shù)據(jù)的合并,pandas.merge根據(jù)一個或多個鍵將不同的DataFrame中的行連接起來;pandas.concat沿著一條軸將多個對象堆疊到一起;combine_first將重復數(shù)據(jù)編接在一起,用一個對象中的值填充另外一個對象中的缺失值。此處使用pd.concat將數(shù)據(jù)按列方向合并,即axis為1,設置keys值用于形成連接軸上的層次化索引。
mer_df = pd.DataFrame({"max_min":max_min_df,"mean":mean_df}) result =pd.concat([mer_df, err_mean_df],axis=1,keys=["diff_para","diff_err"])
更多python量化交易內(nèi)容互動請加微信公眾號:PythonQT-YuanXiao
歡迎訂閱量化交易課程:鏈接地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41756.html
摘要:數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑數(shù)據(jù)聚合與分組運算數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑合并數(shù)據(jù)集可根據(jù)一個或多個鍵將不同中的行鏈接起來。函數(shù)根據(jù)樣本分位數(shù)對數(shù)據(jù)進行面元劃分。字典或,給出待分組軸上的值與分組名之間的對應關系。 本篇內(nèi)容為整理《利用Python進行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。 在前幾篇中我們介紹了 NumPy、pandas、matplotlib 三個...
摘要:一大熊貓世界來去自如的老生常談,從基礎來看,我們?nèi)匀魂P心對于與外部數(shù)據(jù)是如何交互的。函數(shù)受限制問題唯一重要的參數(shù),標志著一個的第個頁將會被取出。數(shù)據(jù)分析入門之總結(jié)基礎一歡迎來翔的博客查看完成版。 一.大熊貓世界來去自如:Pandas的I/O 老生常談,從基礎來看,我們?nèi)匀魂P心pandas對于與外部數(shù)據(jù)是如何交互的。 1.1 結(jié)構(gòu)化數(shù)據(jù)輸入輸出 read_csv與to_csv 是?對...
摘要:屬于前一種,而且日益被用于數(shù)學計算機器學習和多種數(shù)據(jù)科學應用。近來,由于擁有多個針對機器學習自然語言處理數(shù)據(jù)視覺化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學社區(qū)化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時間是10月29日。譯者一...
摘要:編程基礎要學習如何用進行數(shù)據(jù)分析,數(shù)據(jù)分析師建議第一步是要了解一些的編程基礎,知道的數(shù)據(jù)結(jié)構(gòu),什么是向量列表數(shù)組字典等等了解的各種函數(shù)及模塊。數(shù)據(jù)分析師認為數(shù)據(jù)分析有的工作都在處理數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbnbZo?w=1024&h=653); 本文為CDA數(shù)據(jù)分析研究院原創(chuàng)作品,轉(zhuǎn)載需授權(quán) 1.為什么選擇Python進行數(shù)...
摘要:去吧,參加一個在上正在舉辦的實時比賽吧試試你所學到的全部知識微軟雅黑深度學習終于看到這個,興奮吧現(xiàn)在,你已經(jīng)學到了絕大多數(shù)關于機器學習的技術(shù),是時候試試深度學習了。微軟雅黑對于深度學習,我也是個新手,就請把這些建議當作參考吧。 如果你想做一個數(shù)據(jù)科學家,或者作為一個數(shù)據(jù)科學家你想擴展自己的工具和知識庫,那么,你來對地方了。這篇文章的目的,是給剛開始使用Python進行數(shù)據(jù)分析的人,指明一條全...
閱讀 2760·2021-11-16 11:45
閱讀 1668·2021-09-26 10:19
閱讀 2062·2021-09-13 10:28
閱讀 2822·2021-09-08 10:46
閱讀 1547·2021-09-07 10:13
閱讀 1543·2019-08-30 13:50
閱讀 1383·2019-08-30 11:17
閱讀 1463·2019-08-29 13:18