1.長(zhǎng)寬表的變形

創(chuàng)新互聯(lián)建站長(zhǎng)期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宜良企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),宜良網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
什么是長(zhǎng)表?什么是寬表?這個(gè)概念是對(duì)于某一個(gè)特征而言的。例如:一個(gè)表中把性別存儲(chǔ)在某一個(gè)列中, 那么它就是關(guān)于性別的長(zhǎng)表;如果把性別作為列名,列中的元素是某一其他的相關(guān)特征數(shù)值,那么這個(gè)表是 關(guān)于性別的寬表。
1.1 pivot
pivot 是一種典型的長(zhǎng)表變寬表的函數(shù)。對(duì)于一個(gè)基本的長(zhǎng)變寬的操作而言,最重要的有三個(gè)要素,分別是變形后的行索引、需要轉(zhuǎn)到列索引的列, 以及這些列和行索引對(duì)應(yīng)的數(shù)值,它們分別對(duì)應(yīng)了 pivot 方法中的 index, columns, values 參數(shù)。新生成表的 列索引是 columns 對(duì)應(yīng)列的 unique 值,而新表的行索引是 index 對(duì)應(yīng)列的 unique 值,而 values 對(duì)應(yīng)了想 要展示的數(shù)值列。
利用 pivot 進(jìn)行變形操作需要滿足唯一性的要求,即由于在新表中的行列索引對(duì)應(yīng)了唯一的 value ,因此原 表中的 index 和 columns 對(duì)應(yīng)兩個(gè)列的行組合必須唯一。例如,現(xiàn)在把原表中第二行張三的數(shù)學(xué)改為語文就 會(huì)報(bào)錯(cuò),這是由于 Name 與 Subject 的組合中兩次出現(xiàn) (”San Zhang”, ”Chinese”) ,從而最后不能夠確定到 底變形后應(yīng)該是填寫 80 分還是 75 分。
pandas 從 1.1.0 開始,pivot 相關(guān)的三個(gè)參數(shù)允許被設(shè)置為列表,這也意味著會(huì)返回多級(jí)索引。這里構(gòu)造一 個(gè)相應(yīng)的例子來說明如何使用:下表中六列分別為班級(jí)、姓名、測(cè)試類型(期中考試和期末考試)、科目、成 績(jī)、排名。
根據(jù)唯一性原則,新表的行索引等價(jià)于對(duì) index 中的多列使用 drop_duplicates ,而列索引的長(zhǎng)度為 values 中的元素個(gè)數(shù)乘以 columns 的唯一組合數(shù)量(與 index 類似)。
1.2 pivot_table
pivot 的使用依賴于唯一性條件,那如果不滿足唯一性條件,那么必須通過聚合操作使得相同行列組合對(duì)應(yīng) 的多個(gè)值變?yōu)橐粋€(gè)值。例如,張三和李四都參加了兩次語文考試和數(shù)學(xué)考試,按照學(xué)院規(guī)定,最后的成績(jī)是 兩次考試分?jǐn)?shù)的平均值,此時(shí)就無法通過 pivot 函數(shù)來完成。
1.3 melt
長(zhǎng)寬表只是數(shù)據(jù)呈現(xiàn)方式的差異,但其包含的信息量是等價(jià)的,前面提到了利用 pivot 把長(zhǎng)表轉(zhuǎn)為寬表,那 么就可以通過相應(yīng)的逆操作把寬表轉(zhuǎn)為長(zhǎng)表,melt 函數(shù)就起到了這樣的作用。
1.4 wide_to_long
melt 方法中,在列索引中被壓縮的一組值對(duì)應(yīng)的列元素只能代表同一層次的含義,即 values_name 。現(xiàn)在 如果列中包含了交叉類別,比如期中期末的類別和語文數(shù)學(xué)的類別,那么想要把 values_name 對(duì)應(yīng)的 Grade 擴(kuò)充為兩列分別對(duì)應(yīng)語文分?jǐn)?shù)和數(shù)學(xué)分?jǐn)?shù),只把期中期末的信息壓縮,這種需求下就要使用 wide_to_long 函數(shù)來完成。
2 索引的變形
2.1 stack 與 unstack
unstack 函數(shù)的作用是把行索引轉(zhuǎn)為列索引
unstack 的主要參數(shù)是移動(dòng)的層號(hào),默認(rèn)轉(zhuǎn)化最內(nèi)層,移動(dòng)到列索引的最內(nèi)層,同時(shí)支持同時(shí)轉(zhuǎn)化多個(gè)層
類似于 pivot 中的唯一性要求,在 unstack 中必須保證 被轉(zhuǎn)為列索引的行索引層和 被保留的行索引層構(gòu)成 的組合是唯一的,例如把前兩個(gè)列索引改成相同的破壞唯一性,那么就會(huì)報(bào)錯(cuò)
與 unstack 相反,stack 的作用就是把列索引的層壓入行索引,其用法完全類似。
2.2 聚合與變形的關(guān)系
在上面介紹的所有函數(shù)中,除了帶有聚合效果的 pivot_table 以外,所有的函數(shù)在變形前后并不會(huì)帶來 values 個(gè)數(shù)的改變,只是這些值在呈現(xiàn)的形式上發(fā)生了變化。在上一章討論的分組聚合操作,由于生成了新的行列 索引,因此必然也屬于某種特殊的變形操作,但由于聚合之后把原來的多個(gè)值變?yōu)榱艘粋€(gè)值,因此 values 的 個(gè)數(shù)產(chǎn)生了變化,這也是分組聚合與變形函數(shù)的最大區(qū)別。
3 其他變形函數(shù)
3.1 crosstab
crosstab 并不是一個(gè)值得推薦使用的函數(shù),因?yàn)樗軐?shí)現(xiàn)的所有功能 pivot_table 都能完成,并且速度更快。 在默認(rèn)狀態(tài)下,crosstab 可以統(tǒng)計(jì)元素組合出現(xiàn)的頻數(shù),即 count 操作。例如統(tǒng)計(jì) learn_pandas 數(shù)據(jù)集中 學(xué)校和轉(zhuǎn)系情況對(duì)應(yīng)的頻數(shù)
3.2 explode
explode 參數(shù)能夠?qū)δ骋涣械脑剡M(jìn)行縱向的展開,被展開的單元格必須存儲(chǔ) list, tuple, Series, np.ndarray 中的一種類型。
3.3 get_dummies
get_dummies 是用于特征構(gòu)建的重要函數(shù)之一,其作用是把類別特征轉(zhuǎn)為指示變量。例如,對(duì)年級(jí)一列轉(zhuǎn)為 指示變量,屬于某一個(gè)年級(jí)的對(duì)應(yīng)列標(biāo)記為 1,否則為 0
可以使用Python字符串內(nèi)置的替換方法把分隔符“,”替換成‘\r\n’ 換行符即可(Linux、MacOS下?lián)Q行符為:"\n"):
Python代碼實(shí)現(xiàn)
iPython下演示
代碼示例:
"""
在python中如何使輸出的東西從一航行變換為一列
"""
list_data?=?[1,?2,?3,?4,?5,?6]
#?一行輸出
for?v?in?list_data:
print(v,?end='')
#?一列輸出
for?v?in?list_data:
print(v)
輸出
1234561
2
3
4
5
6
輸出截圖
1、程序運(yùn)行輸入數(shù)據(jù)時(shí),第一行為A矩陣的行列數(shù)和B矩陣的行列數(shù),接著分別輸入A、B兩個(gè)矩陣的值。
2、首先,定義6個(gè)整型變量,保存A、B矩陣的行和列,以及控制循環(huán)的變量,k則用于實(shí)現(xiàn)矩陣的乘法。
3、接著,定義三個(gè)整型二維數(shù)組,保存A、B和C矩陣的各元素。
4、輸入三個(gè)矩陣的行數(shù)和列數(shù),保存在變量a、b、c中。
5、輸入矩陣A的各元素,保存在數(shù)組X中。
6、輸入矩陣B的各元素,保存在數(shù)組Y中。
7、將二維數(shù)組Z的各元素,初始化為0。
8、用兩層for循環(huán),控制矩陣的乘法,并輸出乘法所得的結(jié)果。
9、計(jì)算A矩陣和B矩陣的乘法,結(jié)果保存在數(shù)組Z中。
10、最后,輸出乘法所得的結(jié)果,即輸出Z數(shù)組中的所有元素。
11、運(yùn)行程序,輸入矩陣A和B的行數(shù)和列數(shù),以及A矩陣和B矩陣的所有元素,電腦就會(huì)計(jì)算出乘積C矩陣的所有元素,并輸出C矩陣。
網(wǎng)站標(biāo)題:python行變列的函數(shù) python行轉(zhuǎn)列函數(shù)
路徑分享:http://chinadenli.net/article18/dojdidp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、虛擬主機(jī)、品牌網(wǎng)站制作、網(wǎng)站維護(hù)、搜索引擎優(yōu)化、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)