如何在 Python Pandas 中合併多個列?


Pandas 是 Python 中一個流行的資料處理庫,廣泛用於處理結構化資料。處理資料時,常見的任務之一是清理和轉換資料,以便為分析做好準備。

有時,資料可能包含多個具有相似資訊或彼此相關的列。在這種情況下,為了簡化分析或視覺化,將這些列合併成一列可能很有用。

Pandas 提供了幾種將多列合併成一列的方法。在本教程中,我們將詳細探討這些方法,並提供示例來演示如何使用它們。在本教程結束時,您將更好地理解如何在 Pandas 中合併多列,並能夠將這些技術應用到您自己的資料集中。

現在讓我們討論兩種不同的方法,我們可以使用它們來合併 Pandas 中的多列。

使用 Pandas 中的 melt() 方法合併多列

Pandas 中的 melt() 方法是一個強大的工具,用於將寬資料轉換為長資料。我們可以使用此方法將多列合併成一列。

  • 要使用 melt() 方法,我們需要使用 value_vars 引數指定要保留為識別符號變數的列和要合併成一列的列。

  • 結果 DataFrame 將包含一個新列,其中包含來自合併列的值,舊列將轉換為兩列,一列用於識別符號變數,另一列用於值變數。

以下是使用 melt() 方法合併多列的步驟:

  • 匯入 Pandas 庫。

  • 將資料集載入到 DataFrame 中。

  • 在 DataFrame 上使用 melt() 方法,並使用 id_vars 引數指定識別符號變數,使用 value_vars 引數指定要合併的列。

  • 根據需要重新命名列。

示例

現在讓我們來看一下相應的程式碼。

import pandas as pd
from tabulate import tabulate

data = {
   'name': ['Alice', 'Bob', 'Charlie'],
   'age': [25, 30, 35],
   'income_2019': [50000, 60000, 70000],
   'income_2020': [55000, 65000, 75000]}
df = pd.DataFrame(data)
print(tabulate(df, headers='keys', tablefmt='psql'))

print("\n Data Frame After Collapsing Similar Columns")

melted_df = df.melt(
   id_vars=['name', 'age'],
   value_vars=['income_2019', 'income_2020'],
   var_name='year',
   value_name='income')

print(tabulate(melted_df, headers = 'keys', tablefmt = 'psql'))

輸出

執行此程式碼後,您將獲得以下輸出:

觀察原始表格以及合併相似列後的外觀。

使用 Pandas 中的 stack() 方法合併多列

Pandas 中的 stack() 方法是將多列合併成一列的另一種方法。當要合併的列具有分層索引時,我們可以使用此方法。

  • 要使用 stack() 方法,我們首先需要使用 set_index() 方法在 DataFrame 上建立多索引。

  • 然後,我們可以使用 stack() 方法合併列並建立一個 Series 物件。

以下是使用 stack() 方法合併多列的步驟:

  • 匯入 Pandas 庫。

  • 將資料集載入到 DataFrame 中。

  • 使用 set_index() 方法使用要保留為識別符號變數的列在 DataFrame 上建立多索引。

  • 使用 stack() 方法合併列。

  • 使用 reset_index() 方法將生成的 Series 物件轉換回 DataFrame。

  • 根據需要重新命名列。

示例

請考慮以下程式碼。

import pandas as pd
from tabulate import tabulate

data = {
   'name': ['Alice', 'Bob', 'Charlie'],
   'age': [25, 30, 35],
   'income': [(50000, 55000), (60000, 65000), (70000, 75000)]
}
df = pd.DataFrame(data)
print(tabulate(df, headers='keys', tablefmt='fancy_grid'))

df.set_index(['name', 'age'], inplace=True)
stacked_df = df['income'].apply(pd.Series)
print(tabulate(stacked_df, headers='keys', tablefmt='fancy_grid'))

輸出

執行此程式碼後,您將獲得以下輸出:

觀察使用 stack() 方法合併一些列後 Pandas DataFrame 的外觀。

結論

總而言之,合併 Pandas 中的多列可以使用多種方法完成,例如使用 melt() 和 stack() 方法。這兩種方法都是將寬資料轉換為長資料的強大工具,它們可以用於將多列合併成一列。方法的選擇取決於特定的資料集和需要合併的列的結構。透過使用這些方法,我們可以建立一個更有條理且更高效的資料集,這對於資料分析和機器學習應用至關重要。

Pandas 提供了各種強大的資料處理工具,掌握這些工具可以大大提高您分析和處理資料的能力。

更新於:2023年9月28日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告