欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用melt和pivot實現(xiàn)DataFrame格式轉換

 更新時間:2025年01月23日 09:32:59   作者:python慕遙  
在數(shù)據(jù)處理與分析中,經常遇到數(shù)據(jù)需要進行格式轉換的情況,例如將數(shù)據(jù)從寬表格式轉換為長表格式,或將數(shù)據(jù)重新分組匯總,Pandas提供了豐富的reshape操作,尤其是melt和pivot這兩個函數(shù),使得DataFrame可以在寬表與長表之間高效轉換,本文介紹的非常詳細,需要的朋友可以參考下

引言

大家好,在數(shù)據(jù)處理與分析中,經常遇到數(shù)據(jù)需要進行格式轉換的情況,例如將數(shù)據(jù)從寬表格式轉換為長表格式,或將數(shù)據(jù)重新分組匯總。Pandas提供了豐富的reshape操作,尤其是melt和pivot這兩個函數(shù),使得DataFrame可以在寬表與長表之間高效轉換。通過合理使用melt和pivot,可以在數(shù)據(jù)清洗、特征工程等環(huán)節(jié)中極大地提升工作效率。

1. melt操作:寬表轉換為長表

1.1 melt的基本語法

在Pandas中,melt和pivot函數(shù)用于重塑DataFrame的結構,melt用于將寬表格式轉換為長表格式,通常用于將多列數(shù)據(jù)合并到一列中,pivot用于將長表格式轉換為寬表格式,通常用于將唯一值展開為多列。

melt函數(shù)的基本語法如下:

pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value')

frame:要轉換的DataFrame。

id_vars:不需要被轉換的列,這些列將在轉換后的DataFrame中保持不變。

value_vars:需要被轉換的列,默認會轉換除id_vars以外的所有列。

var_name:在轉換后的DataFrame中,新列的列名,表示變量名。

value_name:在轉換后的DataFrame中,新列的列名,表示變量值。

1.2 將寬表轉換為長表

以下是一個包含學生成績的寬表數(shù)據(jù),希望將其轉換為長表格式,以便分析各科成績。

import pandas as pd
 
# 創(chuàng)建示例數(shù)據(jù)
data = {
    '姓名': ['Alice', 'Bob', 'Charlie'],
    '數(shù)學': [85, 90, 95],
    '英語': [78, 82, 88],
    '物理': [92, 87, 94]
}
df = pd.DataFrame(data)
print("原始數(shù)據(jù):\n", df)

原始數(shù)據(jù)如下:

       姓名  數(shù)學  英語  物理
0    Alice  85  78  92
1      Bob  90  82  87
2  Charlie  95  88  94

1.3 使用melt將寬表轉換為長表

希望將每個學生的成績數(shù)據(jù)重塑為包含姓名、科目分數(shù)的長表格式??梢允褂?code>melt實現(xiàn):

# 使用 melt 將寬表轉換為長表
melted_df = pd.melt(df, id_vars=['姓名'], var_name='科目', value_name='分數(shù)')
print("長表格式數(shù)據(jù):\n", melted_df)

轉換后的數(shù)據(jù)如下:

       姓名   科目  分數(shù)
0    Alice   數(shù)學  85
1      Bob   數(shù)學  90
2  Charlie   數(shù)學  95
3    Alice   英語  78
4      Bob   英語  82
5  Charlie   英語  88
6    Alice   物理  92
7      Bob   物理  87
8  Charlie   物理  94

通過melt操作,將每個學生的成績展開為按姓名科目分組的長表格式,使得分析更加靈活。

1.4 melt高級應用:篩選特定列

在某些情況下,只想轉換特定的列,而不需要轉換所有列。

可以通過value_vars參數(shù)指定需要轉換的列,例如只轉換數(shù)學和英語成績:

melted_df_filtered = pd.melt(df, id_vars=['姓名'], value_vars=['數(shù)學', '英語'], var_name='科目', value_name='分數(shù)')
print("篩選后的長表格式數(shù)據(jù):\n", melted_df_filtered)

結果如下:

       姓名   科目  分數(shù)
0    Alice   數(shù)學  85
1      Bob   數(shù)學  90
2  Charlie   數(shù)學  95
3    Alice   英語  78
4      Bob   英語  82
5  Charlie   英語  88

通過指定value_vars參數(shù),將寬表部分轉換為長表,保留了物理成績列未被轉換。

2. pivot操作:長表轉換為寬表

2.1 pivot的基本語法

pivot函數(shù)的基本語法如下:

pd.pivot(data, index, columns, values)

data:要轉換的DataFrame。

index:用于透視表的行索引。

columns:用于透視表的列索引。

values:需要在透視表中顯示的數(shù)據(jù)。

2.2 將長表轉換為寬表

假設已經將學生成績的數(shù)據(jù)轉換為長表格式,現(xiàn)在希望將其還原為寬表:

# 使用 pivot 將長表轉換為寬表
pivot_df = melted_df.pivot(index='姓名', columns='科目', values='分數(shù)')
print("還原后的寬表格式數(shù)據(jù):\n", pivot_df)

結果如下:

科目      數(shù)學   英語   物理
姓名                  
Alice  85  78  92
Bob    90  82  87
Charlie  95  88  94

通過pivot操作,將每個學生的各科成績還原為原始寬表格式。

2.3 pivot的高級應用:多級索引

在復雜的數(shù)據(jù)場景中,可能需要在行或列上使用多級索引。例如,如果數(shù)據(jù)中包含時間信息,可以創(chuàng)建多級索引以展示不同時間的成績變化。

假設數(shù)據(jù)包含學生、科目和學期信息,我們可以通過pivot實現(xiàn)多級索引的透視表:

# 創(chuàng)建包含學期信息的數(shù)據(jù)
data = {
    '姓名': ['Alice', 'Alice', 'Bob', 'Bob'],
    '科目': ['數(shù)學', '英語', '數(shù)學', '英語'],
    '學期': ['第一學期', '第二學期', '第一學期', '第二學期'],
    '分數(shù)': [85, 88, 90, 85]
}
df_multi = pd.DataFrame(data)
 
# 使用 pivot 創(chuàng)建多級索引的寬表
pivot_multi = df_multi.pivot(index='姓名', columns=['科目', '學期'], values='分數(shù)')
print("多級索引的寬表格式數(shù)據(jù):\n", pivot_multi)

結果如下:

科目     數(shù)學          英語       
學期     第一學期    第二學期     第一學期   第二學期
姓名                                        
Alice     85         88        NaN       88
Bob       90        NaN        85       85

通過多級索引,可以在行列上展示更多的維度信息,使數(shù)據(jù)結構更直觀。

3. pivot_table:支持聚合的長表到寬表轉換

pivot只支持唯一值轉換,但如果需要在轉換過程中進行聚合,可以使用pivot_table函數(shù)。pivot_table允許對值進行聚合操作,例如求和、均值等。

假設數(shù)據(jù)中包含多行同一學生的成績,可以使用pivot_table進行聚合:

data = {
    '姓名': ['Alice', 'Alice', 'Bob', 'Bob', 'Charlie', 'Charlie'],
    '科目': ['數(shù)學', '數(shù)學', '英語', '英語', '物理', '物理'],
    '分數(shù)': [85, 90, 82, 88, 94, 96]
}
df_agg = pd.DataFrame(data)
 
# 使用 pivot_table 進行均值聚合
pivot_agg = pd.pivot_table(df_agg, index='姓名', columns='科目', values='分數(shù)', aggfunc='mean')
print("聚合后的寬表格式數(shù)據(jù):\n", pivot_agg)

結果如下:

科目       數(shù)學      英語    物理
姓名                    
Alice  87.5     NaN   NaN
Bob     NaN    85.0   NaN
Charlie NaN    NaN   95.0

分的聚合計算,并生成了一個按學生和科目分組的寬表格式。pivot_table提供了靈活的聚合功能,使得數(shù)據(jù)轉換和統(tǒng)計計算可以同步進行,非常適合多維度、多層級的數(shù)據(jù)分析。

4. melt與pivot的組合使用

在實際的數(shù)據(jù)處理過程中,melt與pivot常常結合使用,可以在寬表與長表之間來回轉換。例如,數(shù)據(jù)可能在某個環(huán)節(jié)需要以長表格式進行某些計算處理,然后再轉換回寬表格式進行展示。

假設有一個原始的寬表格式數(shù)據(jù),表示每個學生每月的消費記錄。想要通過melt將數(shù)據(jù)轉換為長表格式以便計算每個學生的消費總額,再通過pivot將結果還原為寬表格式。

# 創(chuàng)建示例數(shù)據(jù)
data = {
    '姓名': ['Alice', 'Bob', 'Charlie'],
    '1月': [200, 150, 300],
    '2月': [180, 200, 250],
    '3月': [220, 170, 280]
}
df_expense = pd.DataFrame(data)
print("原始數(shù)據(jù):\n", df_expense)

原始數(shù)據(jù)如下:

       姓名   1月   2月   3月
0    Alice  200  180  220
1      Bob  150  200  170
2  Charlie  300  250  280

使用melt將數(shù)據(jù)轉換為長表格式:

# 使用 melt 將寬表轉換為長表
melted_expense = pd.melt(df_expense, id_vars=['姓名'], var_name='月份', value_name='消費額')
print("長表格式數(shù)據(jù):\n", melted_expense)

轉換后的長表數(shù)據(jù):

       姓名  月份  消費額
0    Alice   1月  200
1      Bob   1月  150
2  Charlie   1月  300
3    Alice   2月  180
4      Bob   2月  200
5  Charlie   2月  250
6    Alice   3月  220
7      Bob   3月  170
8  Charlie   3月  280

假設已經對長表數(shù)據(jù)進行了處理或分析,現(xiàn)在需要將其還原為寬表格式。

# 使用 pivot 將長表轉換為寬表
pivot_expense = melted_expense.pivot(index='姓名', columns='月份', values='消費額')
print("還原后的寬表格式數(shù)據(jù):\n", pivot_expense)

還原后的寬表數(shù)據(jù):

月份       1月   2月   3月
姓名                   
Alice   200  180  220
Bob     150  200  170
Charlie 300  250  280

通過這種方式,可以在需要時靈活地在寬表和長表之間轉換,使數(shù)據(jù)清洗和分析過程更加高效和清晰。

melt和pivot是Pandas中強大的reshape工具,能夠有效在寬表和長表之間進行轉換。通過melt可以將數(shù)據(jù)轉換為更易分析的長表格式,而pivot可以將長表轉換為更具可讀性的寬表格式。無論是處理多維度數(shù)據(jù),還是生成多層次的匯總表,melt和pivot都能大大提升數(shù)據(jù)分析的靈活性和效率。

以上就是Python使用melt和pivot實現(xiàn)DataFrame格式轉換的詳細內容,更多關于Python DataFrame格式轉換的資料請關注腳本之家其它相關文章!

相關文章

  • Python圖像處理之邊緣檢測原理詳解

    Python圖像處理之邊緣檢測原理詳解

    邊緣檢測是圖像處理和計算機視覺當中的基本問題,邊緣檢測的目的是標識數(shù)字圖像中亮度變化明顯的點。本文將通過示例和大家介紹一下邊緣檢測的原理,希望對大家有所幫助
    2022-12-12
  • numpy拼接矩陣的實現(xiàn)

    numpy拼接矩陣的實現(xiàn)

    本文主要介紹了numpy拼接矩陣的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python使用os模塊實現(xiàn)更高效地讀寫文件

    Python使用os模塊實現(xiàn)更高效地讀寫文件

    os是python標準庫,包含幾百個函數(shù)常用路徑操作、進程管理、環(huán)境參數(shù)等好多類。本文將使用os模塊實現(xiàn)更高效地讀寫文件,感興趣的可以學習一下
    2022-07-07
  • 結束運行python的方法

    結束運行python的方法

    在本篇文章里小編給大家分享的是關于結束運行python的方法以及相關代碼,有需要的朋友們跟著學習下。
    2020-06-06
  • Python實現(xiàn)高效求解素數(shù)代碼實例

    Python實現(xiàn)高效求解素數(shù)代碼實例

    這篇文章主要介紹了Python實現(xiàn)高效求解素數(shù)代碼實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-06-06
  • Python 解碼Base64 得到碼流格式文本實例

    Python 解碼Base64 得到碼流格式文本實例

    今天小編就為大家分享一篇Python 解碼Base64 得到碼流格式文本實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • jupyter中torch庫的安裝與虛擬環(huán)境的搭建方式

    jupyter中torch庫的安裝與虛擬環(huán)境的搭建方式

    本文詳細介紹了如何在Windows系統(tǒng)上創(chuàng)建和配置PyTorch環(huán)境,包括安裝Anaconda、創(chuàng)建虛擬環(huán)境、配置鏡像源、安裝CUDA、查找和安裝PyTorch版本、安裝ipykernel以及在Jupyter Notebook中切換環(huán)境
    2025-02-02
  • django云端留言板實例詳解

    django云端留言板實例詳解

    這篇文章主要介紹了django云端留言板實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • pytorch 中nn.Dropout的使用說明

    pytorch 中nn.Dropout的使用說明

    這篇文章主要介紹了pytorch 中nn.Dropout的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python實現(xiàn)多個Word文檔合并

    Python實現(xiàn)多個Word文檔合并

    在Python中,可以使用Python-docx庫來操作Word文檔,所以下面小編就為大家介紹一下如何利用Python-docx實現(xiàn)多個Word文檔合并功能吧,需要的可以參考一下
    2023-06-06

最新評論