- 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
廣告