# Python二維表格怎么轉換成一維表格
在數據處理和分析中,經常需要將二維表格(寬格式)轉換為一維表格(長格式)。這種轉換能夠簡化數據聚合、可視化等操作。本文將介紹如何使用Python中的Pandas庫實現這一轉換。
## 一、什么是二維表格和一維表格
### 1. 二維表格(寬格式)
二維表格的特點是:
- 通常包含行索引和列名
- 一個觀測值可能分散在多個列中
- 適合人類閱讀但不便于機器處理
示例:
| 姓名 | 數學 | 語文 | 英語 |
|--------|------|------|------|
| 張三 | 90 | 85 | 92 |
| 李四 | 78 | 88 | 85 |
### 2. 一維表格(長格式)
一維表格的特點是:
- 每行代表一個完整的觀測值
- 通常包含鍵值對形式的數據
- 更適合機器處理和分析
轉換后示例:
| 姓名 | 科目 | 成績 |
|--------|------|------|
| 張三 | 數學 | 90 |
| 張三 | 語文 | 85 |
| 張三 | 英語 | 92 |
| 李四 | 數學 | 78 |
| 李四 | 語文 | 88 |
| 李四 | 英語 | 85 |
## 二、使用Pandas進行轉換
### 1. 基礎方法:melt()
`melt()`是Pandas提供的專門用于寬表轉長表的函數:
```python
import pandas as pd
# 創建示例DataFrame
df = pd.DataFrame({
'姓名': ['張三', '李四'],
'數學': [90, 78],
'語文': [85, 88],
'英語': [92, 85]
})
# 使用melt轉換
long_df = df.melt(
id_vars=['姓名'], # 保留的列
value_vars=['數學', '語文', '英語'], # 要轉換的列
var_name='科目', # 新列名(原列名)
value_name='成績' # 新列名(原值)
)
print(long_df)
當需要處理多級索引時,stack()
方法更靈活:
# 設置姓名作為索引
df.set_index('姓名', inplace=True)
# 使用stack轉換
stacked = df.stack().reset_index()
stacked.columns = ['姓名', '科目', '成績']
print(stacked)
當需要同時轉換多個測量變量時:
# 包含多個測量指標的示例
df_complex = pd.DataFrame({
'學生': ['A', 'B'],
'數學_期中': [85, 76],
'數學_期末': [90, 82],
'語文_期中': [88, 90],
'語文_期末': [92, 88]
})
# 分步驟轉換
melted = df_complex.melt(id_vars=['學生'], var_name='科目_考試')
melted[['科目', '考試類型']] = melted['科目_考試'].str.split('_', expand=True)
final_df = melted.pivot_table(
index=['學生', '科目'],
columns='考試類型',
values='value'
).reset_index()
print(final_df)
大多數可視化庫(如Matplotlib、Seaborn)更適合處理長格式數據:
import seaborn as sns
import matplotlib.pyplot as plt
# 使用轉換后的數據繪圖
sns.barplot(data=long_df, x='姓名', y='成績', hue='科目')
plt.show()
長格式數據更適合關系型數據庫存儲,避免動態添加列。
許多機器學習算法要求輸入數據為長格式。
指定數據類型:轉換前使用astype()
明確數據類型
df[['數學','語文','英語']] = df[['數學','語文','英語']].astype('int16')
分批處理:對于大型數據集,使用chunksize
參數分批處理
使用分類類型:對重復的字符串列使用分類類型節省內存
long_df['科目'] = long_df['科目'].astype('category')
轉換前建議先處理缺失值:
df.fillna(0, inplace=True) # 或用其他填充方式
如需保留原始索引信息:
df.reset_index(inplace=True)
long_df = df.melt(id_vars=['index', '姓名'], ...)
使用pivot()
或pivot_table()
:
wide_df = long_df.pivot(index='姓名', columns='科目', values='成績')
二維表格轉換為一維表格是數據預處理的重要步驟。通過Pandas提供的melt()
、stack()
等方法,可以高效完成這種轉換。掌握這些技巧能夠:
建議讀者在實際項目中多加練習,根據具體需求選擇最適合的轉換方法。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。