Python-pandas返回重復(fù)數(shù)據(jù)的index問題
在處理數(shù)據(jù)的時(shí)候,會(huì)出先相同的列或者行,我們需要有時(shí)候需要對其中一列或者其中一行進(jìn)行操作
因?yàn)閿?shù)據(jù)清洗的過程會(huì)碰到多種情況
下面是我碰到的一種情況
既有合并的又有空列
使用pandas進(jìn)行讀取后
現(xiàn)在需要以第一行作為列名,然后去掉NaN的列
讀取數(shù)據(jù)的時(shí)候,在pd.read_excel()中可以添加參數(shù)header=None這個(gè)參數(shù) 默認(rèn)沒有頭列
代碼如下
import pandas as pd data = pd.read_excel('test.xlsx',header=None)
接下來處理為NaN的列
因?yàn)閜andas讀取NaN只能判斷出狀態(tài),并不能作為選擇,這里需要轉(zhuǎn)變一個(gè)想法,我常用的是轉(zhuǎn)換為True or False,剛好pandas里面有自帶的函數(shù),代碼如下:
使用notna()函數(shù)
# 因?yàn)槎歼M(jìn)來的數(shù)據(jù),我們需要的列名還是在第一行,固我們?nèi)〉谝恍械乃? judge_nan_col = data.iloc[1,:].notna().tolist() print(judge_nan_col)
tolist()是方便我們?nèi)ndex
接下來是關(guān)鍵的部分了,因?yàn)橛卸鄠€(gè)False,所以如果按照我們之前的list.index()這種是不可取的
這里我以為大家演示下
返回的同一個(gè)索引,默認(rèn)是第一次出現(xiàn)的,所以這個(gè)方法是不可取的
這里有多個(gè)方法
1.使用list.index()方法
需要使用count()函數(shù)進(jìn)行計(jì)數(shù)
count = judge_nan_col.count(False) index_list = [] index = -1 # 通過list.index()方法的__start參數(shù),指定起始索引 for i in range(0, count): index = judge_nan_col.index(False, index + 1) index_list.append(index) print(index_list)
2.通過索引遍歷原列表,對每個(gè)元素進(jìn)行判斷
list_len = len(judge_nan_col) index_list = [] for i in range(0, list_len): if judge_nan_col[i] == False: index_list.append(i) print(index_list)
3.使用enumerate()函數(shù)
index_list = [i for i, col in enumerate(judge_nan_col) if col == False] print(index_list)
目前我能想到的就這三種了
獲取到我們想要的列了,并且存到了列表中,這下就是進(jìn)行刪除了
pandas自帶函數(shù)drop()就可以盡心行或列的刪除
# 可以根據(jù)需要看刪除哪一列,我這里是全部進(jìn)行刪除 data = data.drop(index_list,axis=1) print(data)
現(xiàn)在離目標(biāo)很近了,就差第一行了,還是一樣,使用data.iloc()函數(shù),重新構(gòu)建dataframe
# 獲取列名 columns = data.iloc[1,:].tolist() print('columns: ',columns,'\n') print('=================================') data = data.iloc[1:,:] data.columns=columns print(data)
輸出到excel
data.to_excel('complete.xlsx',index=False)
處理行,同上 不過刪除的時(shí)候
需要將data = data.drop(axis=0)
axis=1 轉(zhuǎn)換為 axis=0
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中raise用法簡單實(shí)例(超級詳細(xì),看了無師自通)
python中raise語句用于手動(dòng)觸發(fā)異常,通過raise語句可以在代碼中顯式地引發(fā)異常,從而使程序進(jìn)入異常處理流程,下面這篇文章主要給大家介紹了關(guān)于Python中raise用法的相關(guān)資料,需要的朋友可以參考下2024-03-03Python實(shí)現(xiàn)的批量修改文件后綴名操作示例
這篇文章主要介紹了Python實(shí)現(xiàn)的批量修改文件后綴名操作,涉及Python目錄文件的遍歷、重命名等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12python3使用urllib示例取googletranslate(谷歌翻譯)
這篇文章主要介紹了使用urllib取googletranslate(谷歌翻譯)的示例,通過這個(gè)谷歌翻譯示例學(xué)習(xí)python3中urllib的使用方法,2014-01-01Pycharm使用遠(yuǎn)程linux服務(wù)器conda/python環(huán)境在本地運(yùn)行的方法(圖解))
這篇文章主要介紹了Pycharm使用遠(yuǎn)程linux服務(wù)器conda/python環(huán)境在本地運(yùn)行的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12通過shell+python實(shí)現(xiàn)企業(yè)微信預(yù)警
這篇文章主要介紹了通過shell+python實(shí)現(xiàn)企業(yè)微信預(yù)警,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類的方法分析
這篇文章主要介紹了python實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類的方法,結(jié)合實(shí)例形式分析了Python動(dòng)態(tài)創(chuàng)建類的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下2019-06-06Python的凈值數(shù)據(jù)接口調(diào)用示例分享
這篇文章主要介紹了Python的凈值數(shù)據(jù)接口調(diào)用示例分享的相關(guān)資料,需要的朋友可以參考下2016-03-03