1.長寬表的變形
什么是長表?什么是寬表?這個概念是對于某一個特征而言的。例如:一個表中把性別存儲在某一個列中虱朵, 那么它就是關于性別的長表;如果把性別作為列名,列中的元素是某一其他的相關特征數(shù)值,那么這個表是 關于性別的寬表。
1.1 pivot
pivot 是一種典型的長表變寬表的函數(shù)灶壶。對于一個基本的長變寬的操作而言,最重要的有三個要素杈曲,分別是變形后的行索引驰凛、需要轉(zhuǎn)到列索引的列胸懈, 以及這些列和行索引對應的數(shù)值,它們分別對應了 pivot 方法中的 index, columns, values 參數(shù)恰响。新生成表的 列索引是 columns 對應列的 unique 值趣钱,而新表的行索引是 index 對應列的 unique 值,而 values 對應了想 要展示的數(shù)值列胚宦。
利用 pivot 進行變形操作需要滿足唯一性的要求首有,即由于在新表中的行列索引對應了唯一的 value ,因此原 表中的 index 和 columns 對應兩個列的行組合必須唯一枢劝。例如绞灼,現(xiàn)在把原表中第二行張三的數(shù)學改為語文就 會報錯,這是由于 Name 與 Subject 的組合中兩次出現(xiàn) (”San Zhang”, ”Chinese”) 呈野,從而最后不能夠確定到 底變形后應該是填寫 80 分還是 75 分。
pandas 從 1.1.0 開始印叁,pivot 相關的三個參數(shù)允許被設置為列表被冒,這也意味著會返回多級索引。這里構(gòu)造一 個相應的例子來說明如何使用:下表中六列分別為班級轮蜕、姓名昨悼、測試類型(期中考試和期末考試)、科目跃洛、成 績率触、排名。
根據(jù)唯一性原則汇竭,新表的行索引等價于對 index 中的多列使用 drop_duplicates 葱蝗,而列索引的長度為 values 中的元素個數(shù)乘以 columns 的唯一組合數(shù)量(與 index 類似)。
1.2 pivot_table
pivot 的使用依賴于唯一性條件细燎,那如果不滿足唯一性條件两曼,那么必須通過聚合操作使得相同行列組合對應 的多個值變?yōu)橐粋€值。例如玻驻,張三和李四都參加了兩次語文考試和數(shù)學考試悼凑,按照學院規(guī)定,最后的成績是 兩次考試分數(shù)的平均值璧瞬,此時就無法通過 pivot 函數(shù)來完成户辫。
1.3 melt
長寬表只是數(shù)據(jù)呈現(xiàn)方式的差異,但其包含的信息量是等價的嗤锉,前面提到了利用 pivot 把長表轉(zhuǎn)為寬表渔欢,那 么就可以通過相應的逆操作把寬表轉(zhuǎn)為長表,melt 函數(shù)就起到了這樣的作用档冬。
1.4 wide_to_long
melt 方法中膘茎,在列索引中被壓縮的一組值對應的列元素只能代表同一層次的含義桃纯,即 values_name 。現(xiàn)在 如果列中包含了交叉類別披坏,比如期中期末的類別和語文數(shù)學的類別态坦,那么想要把 values_name 對應的 Grade 擴充為兩列分別對應語文分數(shù)和數(shù)學分數(shù),只把期中期末的信息壓縮棒拂,這種需求下就要使用 wide_to_long 函數(shù)來完成伞梯。
2 索引的變形
2.1 stack 與 unstack
unstack 函數(shù)的作用是把行索引轉(zhuǎn)為列索引
unstack 的主要參數(shù)是移動的層號,默認轉(zhuǎn)化最內(nèi)層帚屉,移動到列索引的最內(nèi)層谜诫,同時支持同時轉(zhuǎn)化多個層
類似于 pivot 中的唯一性要求,在 unstack 中必須保證 被轉(zhuǎn)為列索引的行索引層和 被保留的行索引層構(gòu)成 的組合是唯一的攻旦,例如把前兩個列索引改成相同的破壞唯一性喻旷,那么就會報錯
與 unstack 相反,stack 的作用就是把列索引的層壓入行索引牢屋,其用法完全類似且预。
2.2 聚合與變形的關系
在上面介紹的所有函數(shù)中,除了帶有聚合效果的 pivot_table 以外烙无,所有的函數(shù)在變形前后并不會帶來 values 個數(shù)的改變锋谐,只是這些值在呈現(xiàn)的形式上發(fā)生了變化。在上一章討論的分組聚合操作截酷,由于生成了新的行列 索引涮拗,因此必然也屬于某種特殊的變形操作,但由于聚合之后把原來的多個值變?yōu)榱艘粋€值迂苛,因此 values 的 個數(shù)產(chǎn)生了變化三热,這也是分組聚合與變形函數(shù)的最大區(qū)別。
3 其他變形函數(shù)
3.1 crosstab
crosstab 并不是一個值得推薦使用的函數(shù)三幻,因為它能實現(xiàn)的所有功能 pivot_table 都能完成康铭,并且速度更快。 在默認狀態(tài)下赌髓,crosstab 可以統(tǒng)計元素組合出現(xiàn)的頻數(shù)从藤,即 count 操作。例如統(tǒng)計 learn_pandas 數(shù)據(jù)集中 學校和轉(zhuǎn)系情況對應的頻數(shù)
3.2 explode
explode 參數(shù)能夠?qū)δ骋涣械脑剡M行縱向的展開锁蠕,被展開的單元格必須存儲 list, tuple, Series, np.ndarray 中的一種類型夷野。
3.3 get_dummies
get_dummies 是用于特征構(gòu)建的重要函數(shù)之一,其作用是把類別特征轉(zhuǎn)為指示變量荣倾。例如悯搔,對年級一列轉(zhuǎn)為 指示變量,屬于某一個年級的對應列標記為 1舌仍,否則為 0