Pandas pandas.melt() 函式
    
    
            Minahil Noor
    2023年1月30日
    
    Pandas
    Pandas Core
    
- 
          
            
pandas.melt()語法 - 
          
            示例程式碼:
pandas.melt() - 
          
            示例程式碼:
pandas.melt(),單列為id_vars - 
          
            示例程式碼:
pandas.melt()與跳過列的例子 - 
          
            示例程式碼:
pandas.melt()與多列資訊 
pandas.melt() 函式重塑或轉換一個現有的 DataFrame。它將 DataFrame 的方向從寬格式變為長格式。
pandas.melt() 語法
pandas.melt(dataframe, id_vars, value_vars, var_name, value_name, col_level)
引數
Dataframe | 
強制 | 我們要改變的是 DataFrame 的長格式 | 
id_vars | 
可選 | 它可以是一個元組、列表或一個 N 維的陣列。它是用於識別符號變數的列。你可以選擇一個以上的識別符號列 | 
value_vars | 
可選 | 它可以是一個個元組、列表或一個 N 維的陣列。。預設情況下,沒有指定為識別符號變數的列是值變數。 | 
var_name | 
可選 | 它是一個標量型別的變數。它是識別符號列的名稱。預設情況下,它是 variable | 
value_name | 
可選 | 它是一個標量型別變數。它是非識別符號列的名稱。預設情況下,它是 value | 
col_level | 
可選 | 它是一個整數或字串。在多索引列的情況下,我們可以使用這個引數來轉換我們的 DataFrame | 
返回值
它返回一個轉換後的 DataFrame,其中包含一個或多個識別符號列,而只有兩個非識別符號列,名為變數和值。
示例程式碼:pandas.melt()
首先,我們將只通過傳遞強制性引數即 DataFrame 來學習這個函式。
import pandas as pd
dataframe=pd.DataFrame({'Attendance': {0: 60, 1: 100, 2: 80,3: 78,4: 95},
                    'Name': {0: 'Olivia', 1: 'John', 2: 'Laura',3: 'Ben',4: 'Kevin'},
                    'Obtained Marks': {0: '90%', 1: '75%', 2: '82%',3: '64%',4: '45%'}})
dataframe1 = pd.melt(dataframe)
print(dataframe1)
我們的 DataFrame 為,
   Attendance    Name Obtained Marks
0          60  Olivia            90%
1         100    John            75%
2          80   Laura            82%
3          78     Ben            64%
4          95   Kevin            45%
輸出:
          variable   value
0       Attendance      60
1       Attendance     100
2       Attendance      80
3       Attendance      78
4       Attendance      95
5             Name  Olivia
6             Name    John
7             Name   Laura
8             Name     Ben
9             Name   Kevin
10  Obtained Marks     90%
11  Obtained Marks     75%
12  Obtained Marks     82%
13  Obtained Marks     64%
14  Obtained Marks     45%
在這裡,你可以看到,在輸出中沒有識別符號列。我們有兩個非識別符號列。原來的 DataFrame 的每一列現在都是輸出 DataFrame 中的一行。
現在我們將傳遞可選的引數並檢查結果。
示例程式碼:pandas.melt(),單列為 id_vars
import pandas as pd
dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["Name"])
print(dataframe1)
輸出:
     Name        variable value
0  Olivia      Attendance    60
1    John      Attendance   100
2   Laura      Attendance    80
3     Ben      Attendance    78
4   Kevin      Attendance    95
5  Olivia  Obtained Marks   90%
6    John  Obtained Marks   75%
7   Laura  Obtained Marks   82%
8     Ben  Obtained Marks   64%
9   Kevin  Obtained Marks   45%
識別符號列指定為 Name,旁邊的 variable 和 values 列則是從原始 DataFrame 中提取的值。
我們也可以指定 var_name 和 value_name 的名稱來代替預設的 variable 和 values。
import pandas as pd
dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe, id_vars=["Name"], var_name="Performance", value_name="Success"
)
print(dataframe1)
輸出:
     Name     Performance Success
0  Olivia      Attendance      60
1    John      Attendance     100
2   Laura      Attendance      80
3     Ben      Attendance      78
4   Kevin      Attendance      95
5  Olivia  Obtained Marks     90%
6    John  Obtained Marks     75%
7   Laura  Obtained Marks     82%
8     Ben  Obtained Marks     64%
9   Kevin  Obtained Marks     45%
示例程式碼:pandas.melt() 與跳過列的例子
如果我們只想檢查出勤率,我們需要指定 value_vars。
import pandas as pd
dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(
    dataframe,
    id_vars=["Name"],
    value_vars="Attendance",
    var_name="Performance",
    value_name="Success",
)
print(dataframe1)
輸出:
     Name Performance  Success
0  Olivia  Attendance       60
1    John  Attendance      100
2   Laura  Attendance       80
3     Ben  Attendance       78
4   Kevin  Attendance       95
它只顯示原始 DataFrame 中 Attendance 列的資訊。
示例程式碼:pandas.melt() 與多列資訊
我們在演示 DataFrame 中增加一列 ID。
import pandas as pd
dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 78, 4: 95},
        "ID": {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: "90%", 1: "75%", 2: "82%", 3: "64%", 4: "45%"},
    }
)
dataframe1 = pd.melt(dataframe, id_vars=["ID", "Name"])
print(dataframe1)
輸出:
   ID    Name        variable value
0   1  Olivia      Attendance    60
1   2    John      Attendance   100
2   3   Laura      Attendance    80
3   4     Ben      Attendance    78
4   5   Kevin      Attendance    95
5   1  Olivia  Obtained Marks   90%
6   2    John  Obtained Marks   75%
7   3   Laura  Obtained Marks   82%
8   4     Ben  Obtained Marks   64%
9   5   Kevin  Obtained Marks   45%
ID 和 Name 列都被分配為識別符號列。
        Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe