1.長寬表的變形

為麻山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及麻山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、成都做網(wǎng)站、麻山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
什么是長表?什么是寬表?這個概念是對于某一個特征而言的。例如:一個表中把性別存儲在某一個列中, 那么它就是關(guān)于性別的長表;如果把性別作為列名,列中的元素是某一其他的相關(guān)特征數(shù)值,那么這個表是 關(guān)于性別的寬表。
1.1 pivot
pivot 是一種典型的長表變寬表的函數(shù)。對于一個基本的長變寬的操作而言,最重要的有三個要素,分別是變形后的行索引、需要轉(zhuǎn)到列索引的列, 以及這些列和行索引對應(yīng)的數(shù)值,它們分別對應(yīng)了 pivot 方法中的 index, columns, values 參數(shù)。新生成表的 列索引是 columns 對應(yīng)列的 unique 值,而新表的行索引是 index 對應(yīng)列的 unique 值,而 values 對應(yīng)了想 要展示的數(shù)值列。
利用 pivot 進行變形操作需要滿足唯一性的要求,即由于在新表中的行列索引對應(yīng)了唯一的 value ,因此原 表中的 index 和 columns 對應(yīng)兩個列的行組合必須唯一。例如,現(xiàn)在把原表中第二行張三的數(shù)學改為語文就 會報錯,這是由于 Name 與 Subject 的組合中兩次出現(xiàn) (”San Zhang”, ”Chinese”) ,從而最后不能夠確定到 底變形后應(yīng)該是填寫 80 分還是 75 分。
pandas 從 1.1.0 開始,pivot 相關(guān)的三個參數(shù)允許被設(shè)置為列表,這也意味著會返回多級索引。這里構(gòu)造一 個相應(yīng)的例子來說明如何使用:下表中六列分別為班級、姓名、測試類型(期中考試和期末考試)、科目、成 績、排名。
根據(jù)唯一性原則,新表的行索引等價于對 index 中的多列使用 drop_duplicates ,而列索引的長度為 values 中的元素個數(shù)乘以 columns 的唯一組合數(shù)量(與 index 類似)。
1.2 pivot_table
pivot 的使用依賴于唯一性條件,那如果不滿足唯一性條件,那么必須通過聚合操作使得相同行列組合對應(yīng) 的多個值變?yōu)橐粋€值。例如,張三和李四都參加了兩次語文考試和數(shù)學考試,按照學院規(guī)定,最后的成績是 兩次考試分數(shù)的平均值,此時就無法通過 pivot 函數(shù)來完成。
1.3 melt
長寬表只是數(shù)據(jù)呈現(xiàn)方式的差異,但其包含的信息量是等價的,前面提到了利用 pivot 把長表轉(zhuǎn)為寬表,那 么就可以通過相應(yīng)的逆操作把寬表轉(zhuǎn)為長表,melt 函數(shù)就起到了這樣的作用。
1.4 wide_to_long
melt 方法中,在列索引中被壓縮的一組值對應(yīng)的列元素只能代表同一層次的含義,即 values_name 。現(xiàn)在 如果列中包含了交叉類別,比如期中期末的類別和語文數(shù)學的類別,那么想要把 values_name 對應(yīng)的 Grade 擴充為兩列分別對應(yīng)語文分數(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 聚合與變形的關(guān)系
在上面介紹的所有函數(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)系情況對應(yīng)的頻數(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)為 指示變量,屬于某一個年級的對應(yīng)列標記為 1,否則為 0
python中的函數(shù),大多需要配置參數(shù),以下是幾種函數(shù)的參數(shù)類型:
1.必備參數(shù):以正確的順序、個數(shù)傳入函數(shù)。調(diào)用時的參數(shù)情況要和聲明時一樣。最常用的情況。
def tplink(a,b):
c=a+b+b
return c?
tplink(4,2)
2.關(guān)鍵字參數(shù):使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序和聲明時不一致,因為python解析器會在調(diào)用函數(shù)時,用參數(shù)名匹配參數(shù)值。
def tplink(age1,age2):
ageall=age1+age2+age2
return ageall
tplink(age2=4,age1=2)
3.默認參數(shù):默認某個參數(shù)的取值
def tplink(age1,age2=5):
ageall=age1+age2+age2
return ageall
tplink(age1=4)
4.不定長參數(shù):在聲明時并不確定 調(diào)用時的參數(shù)數(shù)量。這種情況,可以用不定長參數(shù)進行解決,具體操作是在參數(shù)名前用*。
但不能和 關(guān)鍵字參數(shù)并用。一般在正常參數(shù)arg之后。
*args、**kwargs的定義:
這兩個都是python中的不定長參數(shù),又稱為可變參數(shù)。
*args 表示任何多個無名參數(shù),它是一個 tuple ;
**kwargs 表示關(guān)鍵字參數(shù),它是一個dict。
同時使用 * args和 ** kwargs 時,必須 * args參數(shù)列要在 ** kwargs前。且都在arg之后。
函數(shù)在調(diào)用時,會根據(jù)順序,看是否放進 *args 或者 **kwargs中。
具體可根據(jù)實際情況使用,可以 更方便靈活的接收信息。
open最多可以帶三個參數(shù),但是后面兩個是可選的,[]內(nèi)的內(nèi)容表示可選參數(shù)。
open第一個參數(shù)是文件名稱,第二個是模式,第三個表示緩沖方式,看隨機文檔有詳細解釋的。
分享名稱:python變長函數(shù) python 可變長度參數(shù)
路徑分享:http://www.chinadenli.net/article20/doogojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、網(wǎng)站策劃、品牌網(wǎng)站制作、建站公司、網(wǎng)站改版、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)