
- Python Pandas 教程
- Python Pandas - 首頁
- Python Pandas - 簡介
- Python Pandas - 環境設定
- Python Pandas - 基礎知識
- Python Pandas - 資料結構介紹
- Python Pandas - 索引物件
- Python Pandas - 面板 (Panel)
- Python Pandas - 基本功能
- Python Pandas - 索引和資料選擇
- Python Pandas - Series
- Python Pandas - Series
- Python Pandas - Series 物件切片
- Python Pandas - Series 物件的屬性
- Python Pandas - Series 物件的算術運算
- Python Pandas - 將 Series 轉換為其他物件
- Python Pandas - DataFrame
- Python Pandas - DataFrame
- Python Pandas - 訪問 DataFrame
- Python Pandas - DataFrame 物件切片
- Python Pandas - 修改 DataFrame
- Python Pandas - 從 DataFrame 中刪除行
- Python Pandas - DataFrame 的算術運算
- Python Pandas - I/O 工具
- Python Pandas - I/O 工具
- Python Pandas - 使用 CSV 格式
- Python Pandas - 讀取和寫入 JSON 檔案
- Python Pandas - 從 Excel 檔案讀取資料
- Python Pandas - 將資料寫入 Excel 檔案
- Python Pandas - 使用 HTML 資料
- Python Pandas - 剪貼簿
- Python Pandas - 使用 HDF5 格式
- Python Pandas - 與 SQL 的比較
- Python Pandas - 資料處理
- Python Pandas - 排序
- Python Pandas - 重索引
- Python Pandas - 迭代
- Python Pandas - 級聯
- Python Pandas - 統計函式
- Python Pandas - 描述性統計
- Python Pandas - 使用文字資料
- Python Pandas - 函式應用
- Python Pandas - 選項和自定義
- Python Pandas - 視窗函式
- Python Pandas - 聚合
- Python Pandas - 合併/連線
- Python Pandas - 多層索引 (MultiIndex)
- Python Pandas - 多層索引基礎
- Python Pandas - 使用多層索引進行索引
- Python Pandas - 使用多層索引進行高階重索引
- Python Pandas - 重新命名多層索引標籤
- Python Pandas - 對多層索引進行排序
- Python Pandas - 二元運算
- Python Pandas - 二元比較運算
- Python Pandas - 布林索引
- Python Pandas - 布林掩碼
- Python Pandas - 資料重塑和透視
- Python Pandas - 透視表
- Python Pandas - 堆疊和解堆疊
- Python Pandas - 熔化 (Melting)
- Python Pandas - 計算虛擬變數
- Python Pandas - 分類資料
- Python Pandas - 分類資料
- Python Pandas - 分類資料的排序和排列
- Python Pandas - 分類資料的比較
- Python Pandas - 處理缺失資料
- Python Pandas - 缺失資料
- Python Pandas - 填充缺失資料
- Python Pandas - 缺失值的插值
- Python Pandas - 刪除缺失資料
- Python Pandas - 使用缺失資料的計算
- Python Pandas - 處理重複項
- Python Pandas - 重複資料
- Python Pandas - 計數和檢索唯一元素
- Python Pandas - 重複標籤
- Python Pandas - 分組和聚合
- Python Pandas - GroupBy
- Python Pandas - 時間序列資料
- Python Pandas - 日期功能
- Python Pandas - 時間增量 (Timedelta)
- Python Pandas - 稀疏資料結構
- Python Pandas - 稀疏資料
- Python Pandas - 視覺化
- Python Pandas - 視覺化
- Python Pandas - 其他概念
- Python Pandas - 注意事項和陷阱
- Python Pandas 有用資源
- Python Pandas - 快速指南
- Python Pandas - 有用資源
- Python Pandas - 討論
Python Pandas - 堆疊和解堆疊
Pandas 中的堆疊和解堆疊是重塑 DataFrame 的有用技術,可以以不同的方式提取更多資訊。它也能有效地處理多層索引。無論是將列壓縮成行級別還是將行擴充套件成列,這些操作對於處理複雜資料集都至關重要。
Pandas 庫為此提供了兩種主要方法:堆疊和解堆疊操作,它們分別是 stack() 和 unstack()。在本教程中,我們將學習 Pandas 中的堆疊和解堆疊技術,以及處理缺失資料的示例。
Pandas 中的堆疊
Pandas 中的堆疊是一個將 DataFrame 列壓縮成行的過程。Pandas 中的 DataFrame.stack() 方法用於將列級別堆疊到索引中。此方法將列標籤級別(可能是分層的)旋轉到行標籤,並返回一個具有多層索引的新 DataFrame 或 Series。
示例
以下示例使用 df.stack() 方法將列旋轉到行索引。
import pandas as pd import numpy as np # Create MultiIndex tuples = [["x", "x", "y", "y", "", "f", "z", "z"],["1", "2", "1", "2", "1", "2", "1", "2"]] index = pd.MultiIndex.from_arrays(tuples, names=["first", "second"]) # Create a DataFrame df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=["A", "B"]) # Display the input DataFrame print('Input DataFrame:\n', df) # Stack columns stacked = df.stack() print('Output Reshaped DataFrame:\n', stacked)
以上程式碼的輸出如下:
Input DataFrame:
A | B | ||
---|---|---|---|
first | second | ||
x | 1 | 0.596485 | -1.356041 |
2 | -1.091407 | 0.246216 | |
y | 1 | 0.499328 | -1.346817 |
2 | -0.893557 | 0.014678 | |
1 | -0.059916 | 0.106597 | |
f | 2 | -0.315096 | -0.950424 |
z | 1 | 1.050350 | -1.744569 |
2 | -0.255863 | 0.539803 |
first | second | ||
---|---|---|---|
x | 1 | A | 0.596485 |
B | -1.356041 | ||
2 | A | -1.091407 | |
B | 0.246216 | ||
y | 1 | A | 0.499328 |
B | -1.346817 | ||
2 | A | -0.893557 | |
B | 0.014678 | ||
1 | A | -0.059916 | |
B | 0.106597 | ||
f | 2 | A | -0.315096 |
B | -0.950424 | ||
z | 1 | A | 1.050350 |
B | -1.744569 | ||
2 | A | -0.255863 | |
B | 0.539803 |
在這裡,stack() 方法將列 A 和 B 旋轉到索引中,將 DataFrame 壓縮成長格式。
Pandas 中的解堆疊
解堆疊透過將行索引級別移回列來反轉堆疊操作。Pandas DataFrame.unstack() 方法用於將行索引級別旋轉成列,這對於將長格式 DataFrame 轉換為寬格式非常有用。
示例
以下示例演示了 df.unstack() 方法在解堆疊 DataFrame 時的工作方式。
import pandas as pd import numpy as np # Create MultiIndex tuples = [["x", "x", "y", "y", "", "f", "z", "z"],["1", "2", "1", "2", "1", "2", "1", "2"]] index = pd.MultiIndex.from_arrays(tuples, names=["first", "second"]) # Create a DataFrame df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=["A", "B"]) # Display the input DataFrame print('Input DataFrame:\n', df) # Unstack the DataFrame unstacked = df.unstack() print('Output Reshaped DataFrame:\n', unstacked)
以上程式碼的輸出如下:
Input DataFrame:
A | B | ||
---|---|---|---|
first | second | ||
x | 1 | -0.407537 | -0.957010 |
2 | 0.045479 | 0.789849 | |
y | 1 | 0.751488 | -0.474536 |
2 | -1.043122 | -0.015152 | |
1 | -0.133349 | 1.094900 | |
f | 2 | 1.681111 | 2.480652 |
z | 1 | 0.283679 | 0.769553 |
2 | -2.034907 | 0.301275 |
解堆疊期間處理缺失資料
當重塑後的 DataFrame 在子組中具有不相等的標籤集時,解堆疊可能會產生缺失值。Pandas 預設情況下使用 NaN 處理這些缺失值,但您可以指定自定義填充值。
示例
此示例演示如何在解堆疊 DataFrame 時處理缺失值。
import pandas as pd import numpy as np # Create Data index = pd.MultiIndex.from_product([["bar", "baz", "foo", "qux"], ["one", "two"]], names=["first", "second"]) columns = pd.MultiIndex.from_tuples([("A", "cat"), ("B", "dog"), ("B", "cat"), ("A", "dog")], names=["exp", "animal"]) df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=columns) # Create a DataFrame df3 = df.iloc[[0, 1, 4, 7], [1, 2]] print(df3) # Unstack the DataFame unstacked = df3.unstack() # Display the Unstacked DataFrame print("Unstacked DataFrame without Filling:\n",unstacked) unstacked_filled = df3.unstack(fill_value=1) print("Unstacked DataFrame with Filling:\n",unstacked_filled)
以上程式碼的輸出如下:
exp B animal dog cat first second bar one -0.556587 -0.157084 two 0.109060 0.856019 foo one -1.034260 1.548955 qux two -0.644370 -1.871248 Unstacked DataFrame without Filling: exp B animal dog cat second one two one two first bar -0.556587 0.10906 -0.157084 0.856019 foo -1.034260 NaN 1.548955 NaN qux NaN -0.64437 NaN -1.871248 Unstacked DataFrame with Filling: exp B animal dog cat second one two one two first bar -0.556587 0.10906 -0.157084 0.856019 foo -1.034260 1.00000 1.548955 1.000000 qux 1.000000 -0.64437 1.000000 -1.871248
廣告