Pandas處理DataFrame稀疏數(shù)據(jù)及維度不匹配數(shù)據(jù)分析詳解
前言
眾所周知我們獲取的第一手?jǐn)?shù)據(jù)往往都是比較雜亂無章的,這些文件保存一般都是csv文件或者是excel文件,讀取轉(zhuǎn)換成DataFrame還有可能因為缺少列索引或者是各類數(shù)據(jù)維度不相等而報錯。讀取成功為DataFrame仍然有很多問題存在,比如列索引缺失,眾多NaN數(shù)據(jù)以及合并計算問題等,這篇文章將具體解決此場景下的內(nèi)容。
一、索引缺失
讀取缺失量較大的數(shù)據(jù)時,索引并不是能完全覆蓋到的。存在著列索引缺失的問題,這是一個比較頭疼的問題,使得我們后面的數(shù)據(jù)特征無法使用:
這是針對機(jī)器學(xué)習(xí)的數(shù)據(jù)集特征,面對這種情況我們可以通過重新設(shè)置索引的方式,倘若特征之間是有規(guī)律的話,例如上表5列以后的數(shù)據(jù)每列的列索引都是features的話那么我們可以通過reindex的方法給它補(bǔ)全索引:
def deal_defect(df,n): df_defect=df.iloc[:,n:] m=4 list_columns=[] for i in range(df_defect.shape[1]): list_columns.append('features%d'%m) m=m+1 df_defect.columns=list_columns df_all=pd.concat([df.iloc[:,:n],df_defect],axis=1) return df_all deal_defect(df,5)
二、負(fù)值取正
若是要對整個DataFrame的值都取負(fù)數(shù),并不需要挨個列都轉(zhuǎn)再使用abs函數(shù),讀取的DataFrame一般都是object類型不能直接使用abs,需要使用astype將dataframe類型轉(zhuǎn)換:
當(dāng)數(shù)據(jù)中帶有NaN時是不能直接轉(zhuǎn)int的:
df_fill=df.astype('int')
IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer
但是我們轉(zhuǎn)換為float的時候原始數(shù)據(jù)集又出現(xiàn)了后面帶.0的情況:
這里我們要使用到fillna函數(shù),先轉(zhuǎn)為float取絕對值之后再填充為空值之后替換為-1,這樣一來-1的位置就是缺失值的位置,以便于我們識別:
def fill_conver(df): df_fill=df.astype('float') df_fill=abs(df_fill) df_fill=df_fill.fillna('') df_fill=df_fill.replace('',-1) df_fill=df_fill.astype(int) return df_fill fill_conver(df)
三、提取數(shù)值
既然有很多空值我們可以采取側(cè)缺將低于一定比例的數(shù)據(jù)去除,這部分在上篇缺失值處理文章已經(jīng)談到這里不再說明。我們最常遇到的情況就是需要處理空值只提去出相應(yīng)標(biāo)簽下的數(shù)值,這里涉及到列索引的選擇和合并操作。例如我們只需要特征列偶數(shù)列的數(shù)值:
def get_features(df): list_all_link=[] df=df.iloc[:,2:] for i in range(df.shape[0]): #flag為控制外層循環(huán)開關(guān) flag=1 for j in range(df.shape[1]): if(flag==0): break if(j%2==0): if(df.iloc[i:i+1,j].item()==-1): flag=0 else: list_all_link.append(list(df.iloc[i:i+1,j])) return list_all_link get_features(df)
四、提取唯一值
如果我們需要只需要取到的數(shù)列中的唯一值,需要對數(shù)據(jù)集進(jìn)行處理,可以使用ravel()和unique()函數(shù)。此時我們還需要注意刪掉-1:
def unique_df(df): df_features=df.iloc[:,2:] unique_series=pd.Series(pd.Series(df_features.iloc[:,[i%2==0 for i in range(len(df_features.columns))]].values.ravel()).unique()) list_series=list(unique_series.values) return list_series unique_list=unique_df(df) unique_list.remove(-1) unique_list
以上就是Pandas處理DataFrame稀疏數(shù)據(jù)及維度不匹配數(shù)據(jù)分析詳解的詳細(xì)內(nèi)容,更多關(guān)于Pandas DataFrame數(shù)據(jù)分析的資料請關(guān)注腳本之家其它相關(guān)文章!
- SQL操作Pandas?DataFrame的三種方式示例詳解
- Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作
- Python pymysql連接數(shù)據(jù)庫并將查詢結(jié)果轉(zhuǎn)化為Pandas dataframe
- Python Pandas創(chuàng)建Dataframe數(shù)據(jù)框的六種方法匯總
- Pandas.DataFrame重置Series的索引index(reset_index)
- Pandas.DataFrame刪除指定行和列(drop)的實現(xiàn)
- Pandas DataFrame數(shù)據(jù)存儲格式比較分析
相關(guān)文章
Python對數(shù)據(jù)進(jìn)行插值和下采樣的方法
今天小編就為大家分享一篇Python對數(shù)據(jù)進(jìn)行插值和下采樣的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07django創(chuàng)建簡單的頁面響應(yīng)實例教程
這篇文章主要給大家介紹了關(guān)于django如何創(chuàng)建簡單的頁面響應(yīng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09pytorch中節(jié)約顯卡內(nèi)存的方法和技巧
顯存不足是很多人感到頭疼的問題,畢竟能擁有大量顯存的實驗室還是少數(shù),而現(xiàn)在的模型已經(jīng)越跑越大,模型參數(shù)量和數(shù)據(jù)集也越來越大,所以這篇文章給大家總結(jié)了一些pytorch中節(jié)約顯卡內(nèi)存的方法和技巧,需要的朋友可以參考下2023-11-11python實現(xiàn)手機(jī)銷售管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)手機(jī)銷售管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03