網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Pandas處理DataFrame稀疏數(shù)據(jù)及維度不匹配數(shù)據(jù)分析詳解_python
作者:fanstuck ? 更新時(shí)間: 2023-05-15 編程語(yǔ)言前言
眾所周知我們獲取的第一手?jǐn)?shù)據(jù)往往都是比較雜亂無(wú)章的,這些文件保存一般都是csv文件或者是excel文件,讀取轉(zhuǎn)換成DataFrame還有可能因?yàn)槿鄙倭兴饕蛘呤歉黝?lèi)數(shù)據(jù)維度不相等而報(bào)錯(cuò)。讀取成功為DataFrame仍然有很多問(wèn)題存在,比如列索引缺失,眾多NaN數(shù)據(jù)以及合并計(jì)算問(wèn)題等,這篇文章將具體解決此場(chǎng)景下的內(nèi)容。
一、索引缺失
讀取缺失量較大的數(shù)據(jù)時(shí),索引并不是能完全覆蓋到的。存在著列索引缺失的問(wèn)題,這是一個(gè)比較頭疼的問(wèn)題,使得我們后面的數(shù)據(jù)特征無(wú)法使用:
這是針對(duì)機(jī)器學(xué)習(xí)的數(shù)據(jù)集特征,面對(duì)這種情況我們可以通過(guò)重新設(shè)置索引的方式,倘若特征之間是有規(guī)律的話,例如上表5列以后的數(shù)據(jù)每列的列索引都是features的話那么我們可以通過(guò)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ù)值取正
若是要對(duì)整個(gè)DataFrame的值都取負(fù)數(shù),并不需要挨個(gè)列都轉(zhuǎn)再使用abs函數(shù),讀取的DataFrame一般都是object類(lèi)型不能直接使用abs,需要使用astype將dataframe類(lèi)型轉(zhuǎn)換:
當(dāng)數(shù)據(jù)中帶有NaN時(shí)是不能直接轉(zhuǎn)int的:
df_fill=df.astype('int')
IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer
但是我們轉(zhuǎn)換為float的時(shí)候原始數(shù)據(jù)集又出現(xiàn)了后面帶.0的情況:
這里我們要使用到fillna函數(shù),先轉(zhuǎn)為float取絕對(duì)值之后再填充為空值之后替換為-1,這樣一來(lái)-1的位置就是缺失值的位置,以便于我們識(shí)別:
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)談到這里不再說(shuō)明。我們最常遇到的情況就是需要處理空值只提去出相應(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)開(kāi)關(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ù)列中的唯一值,需要對(duì)數(shù)據(jù)集進(jìn)行處理,可以使用ravel()和unique()函數(shù)。此時(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
原文鏈接:https://juejin.cn/post/7200288095559581752
相關(guān)推薦
- 2022-12-12 Python生成直方圖方法實(shí)現(xiàn)詳解_python
- 2022-05-13 eigen交叉編譯
- 2022-05-08 使用Visual?Studio編寫(xiě)單元測(cè)試_實(shí)用技巧
- 2023-02-26 詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系_python
- 2022-12-29 Android?Fragment的具體使用方式詳解_Android
- 2022-08-10 Go語(yǔ)言反射獲取類(lèi)型屬性和方法示例_Golang
- 2024-01-13 Maven項(xiàng)目導(dǎo)入第三方j(luò)ar包
- 2022-05-13 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)棧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支