Appearance
数据重塑
数据重塑是将数据从一种格式转换为另一种格式的操作,常见的是长宽格式转换。
宽格式转长格式
python
import pandas as pd
# 宽格式数据
df_wide = pd.DataFrame({
'姓名': ['张三', '李四'],
'语文': [90, 85],
'数学': [95, 88],
'英语': [88, 92]
})
print("宽格式:")
print(df_wide)
# 转为长格式
df_long = df_wide.melt(
id_vars=['姓名'],
value_vars=['语文', '数学', '英语'],
var_name='科目',
value_name='分数'
)
print("\n长格式:")
print(df_long)长格式转宽格式
python
# 使用pivot转为宽格式
df_wide_back = df_long.pivot(
index='姓名',
columns='科目',
values='分数'
)
print("转回宽格式:")
print(df_wide_back)多层索引重塑
python
df = pd.DataFrame({
'班级': ['A', 'A', 'B', 'B'],
'性别': ['男', '女', '男', '女'],
'数学': [90, 85, 88, 92],
'英语': [88, 90, 85, 87]
})
# 设置多层索引后stack
df_indexed = df.set_index(['班级', '性别'])
df_stacked = df_indexed.stack()
print("Stack结果:")
print(df_stacked)
# unstack转回
df_unstacked = df_stacked.unstack()
print("\nUnstack结果:")
print(df_unstacked)交叉表
python
df = pd.DataFrame({
'班级': ['A', 'A', 'B', 'B', 'A', 'B'],
'科目': ['数学', '英语', '数学', '英语', '数学', '英语'],
'分数': [90, 85, 88, 92, 87, 90]
})
# 创建交叉表
cross_tab = df.pivot_table(
values='分数',
index='班级',
columns='科目',
aggfunc='mean'
)
print("交叉表:")
print(cross_tab)数据透视
python
df = pd.DataFrame({
'日期': ['周一', '周一', '周二', '周二'],
'产品': ['A', 'B', 'A', 'B'],
'销量': [100, 150, 120, 180]
})
# 透视表
pivot = df.pivot(index='日期', columns='产品', values='销量')
print("透视表:")
print(pivot)处理重复值
python
df = pd.DataFrame({
'姓名': ['张三', '张三', '李四'],
'科目': ['数学', '数学', '英语'],
'分数': [90, 95, 88]
})
# 有重复值时使用pivot_table
df_pivot = df.pivot_table(
index='姓名',
columns='科目',
values='分数',
aggfunc='mean' # 对重复值取平均
)
print("处理重复值:")
print(df_pivot)实际应用
python
# 销售数据重塑
sales_data = pd.DataFrame({
'地区': ['北', '北', '南', '南'],
'月份': ['一月', '二月', '一月', '二月'],
'产品A': [100, 120, 80, 90],
'产品B': [150, 180, 120, 140]
})
# 转为长格式进行分析
sales_long = sales_data.melt(
id_vars=['地区', '月份'],
value_vars=['产品A', '产品B'],
var_name='产品',
value_name='销量'
)
print("销售数据长格式:")
print(sales_long)
# 按产品汇总
product_summary = sales_long.groupby('产品')['销量'].sum()
print("\n产品销量汇总:")
print(product_summary)数据重塑是数据整理的重要技能,可以根据分析需求灵活转换数据格式。