您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python怎么指定列前置”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python怎么指定列前置”吧!
有位小伙伴提了一個(gè)簡(jiǎn)單的問(wèn)題,數(shù)據(jù)如下:
我希望把列"key1,2,3"調(diào)整到表頭的最左邊,其他的列順序我不關(guān)心
別讓我把所有列名寫(xiě)出來(lái),因?yàn)槲矣行┍砜赡苡袔资习俚牧?/p>
我們需要知道一些前提知識(shí)。
pandas 中怎么指定列順序?非常簡(jiǎn)單:
往 df[] 中指定多個(gè)列名的 list 即可
顯然,提問(wèn)者就是不希望手工輸入所有的列表
pandas 中怎么獲取表的所有列名:
df.columns 即可。
如果希望得到列表,只需要 list(df.columns) 即可
如何拼接 Python 中的2個(gè)列表:
理解這兩點(diǎn)后,現(xiàn)在的問(wèn)題其實(shí)不是什么 pandas 或 啥表頭的順序問(wèn)題,而是一個(gè)列表構(gòu)造問(wèn)題:
行4:是解決問(wèn)題的關(guān)鍵
接下來(lái),基于這些前提條件和思路,看看能做出多少種解法
這是最直接的方式:
行4-7:遍歷所有列,把非目標(biāo)列名去掉即可
如果你不熟悉推導(dǎo)式,也可以用 for in 遍歷
"我不懂啥推導(dǎo)式呀,遍歷也用得不熟悉,有沒(méi)有不用遍歷的方式?"
"Python 不是一直聲稱語(yǔ)法簡(jiǎn)單嗎,為什么不可以把 2 個(gè)列表相減,就得到剩余列名?"
這想法還挺有道理的,為什么不呢?
因?yàn)榱斜碇械脑厥强梢灾貜?fù)的,如果 2 個(gè)列表能相減,他就要考慮有重復(fù)元素與沒(méi)有重復(fù)元素的歧義。
因此,列表是不能相減,但是 Python 中的確有一種東西與列表相似,但他里面的元素不能重復(fù)—— set(集)
由此我們可以得到第二種解法:
行4:用 set 函數(shù)得到 set 結(jié)構(gòu),即可相減。
為什么需要在外面再套一個(gè) list 呢?因?yàn)橄乱徊轿覀冃枰褂?"列表相加" 的騷操作
細(xì)心的你可能注意到,出來(lái)的結(jié)果中,其他列的順序與解法1不一樣!
因?yàn)?set 是不關(guān)心元素順序的,2 個(gè) set 相減后,順序變化了
"有沒(méi)有不同遍歷,有可以保留其他列的原始前后順序的?"
前面的解法,本質(zhì)上都在做去重工作。pandas 中不也有去重功能嗎,我們也可以用上。
行4:pd.Series 中傳入有重復(fù)元素的列表,就能返回一個(gè) Series。使用他的去重方法即可完成
"有問(wèn)題啊,new_cols 是列表?,不應(yīng)該是一個(gè) Series 嗎?為什么 df[一個(gè)Series] 也能改變列順序?"
實(shí)際上,df[] 里面可以接受大多數(shù)序列,比如 set 或 numpy 的數(shù)組等等,唯獨(dú)元組不行。
感謝各位的閱讀,以上就是“Python怎么指定列前置”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python怎么指定列前置這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。