一、多维转一维
1、数据准备在Excel中
2、使用Pandas转换
import pandas as pd
df = pd.read_excel('./各区域数据.xlsx')
df = pd.melt(df, id_vars=['大区', '地区', '省份', '年份'],
value_vars=df.columns[4:], var_name='月份', value_name='人员')
df.to_excel('./各区域数据-转一维.xlsx')
print(df)
**************运行结果**************
大区 地区 省份 年份 月份 人员
0 东北区 东北区 黑龙江 2023 1月 15
1 华东区 华东区 江西 2023 1月 2
2 华东区 华东区 浙江 2023 1月 4
3 华东区 华东区 山东 2023 1月 6
4 华南区 华南A区 湖南 2023 1月 22
.. ... ... ... ... ... ..
307 西北区 西北区 新疆 2023 12月 0
308 西北区 西北区 甘肃 2023 12月 0
309 西北区 西北区 宁夏 2023 12月 0
310 华南区 华南B区 海南 2023 12月 0
311 西南区 西南区 重庆 2023 12月 0
[312 rows x 6 columns]
二、一维转多维
1、直接使用上面已经转好的一维数据转多维
import pandas as pd
df = pd.read_excel('./各区域数据-转一维.xlsx')
df = pd.pivot_table(
df, values='人数',
index=['大区', '地区', '省份', '年份'],
columns='月份').reset_index()
df.columns.name = ''
df.to_excel('./各区域数据-转多维.xlsx')
print(df)
**************运行结果**************
大区 地区 省份 年份 10月 11月 12月 1月 2月 3月 4月 5月 6月 7月 8月 9月
0 东北区 东北区 吉林 2023 0 0 0 1 4 0 0 0 0 0 0 0
1 东北区 东北区 辽宁 2023 0 0 0 36 7 0 0 0 0 0 0 0
2 东北区 东北区 黑龙江 2023 0 0 0 15 57 0 0 0 0 0 0 0
3 华东区 华东区 安徽 2023 0 0 0 22 4 0 0 0 0 0 0 0
4 华东区 华东区 山东 2023 0 0 0 6 6 0 0 0 0 0 0 0
5 华东区 华东区 江苏 2023 0 0 0 10 1 0 0 0 0 0 0 0
6 华东区 华东区 江西 2023 0 0 0 2 3 0 0 0 0 0 0 0
7 华东区 华东区 浙江 2023 0 0 0 4 0 0 0 0 0 0 0 0
8 华东区 华东区 福建 2023 0 0 0 15 23 0 0 0 0 0 0 0
9 华北区 华北区 内蒙古 2023 0 0 0 1 4 0 0 0 0 0 0 0
10 华北区 华北区 山西 2023 0 0 0 4 13 0 0 0 0 0 0 0
11 华北区 华北区 河北 2023 0 0 0 4 2 0 0 0 0 0 0 0
12 华南区 华南A区 河南 2023 0 0 0 4 6 0 0 0 0 0 0 0
13 华南区 华南A区 湖北 2023 0 0 0 14 24 0 0 0 0 0 0 0
14 华南区 华南A区 湖南 2023 0 0 0 22 19 0 0 0 0 0 0 0
15 华南区 华南B区 广东 2023 0 0 0 55 0 0 0 0 0 0 0 0
16 华南区 华南B区 广西 2023 0 0 0 17 73 0 0 0 0 0 0 0
17 华南区 华南B区 海南 2023 0 0 0 10 36 0 0 0 0 0 0 0
18 西北区 西北区 宁夏 2023 0 0 0 20 0 0 0 0 0 0 0 0
19 西北区 西北区 新疆 2023 0 0 0 1 0 0 0 0 0 0 0 0
20 西北区 西北区 甘肃 2023 0 0 0 2 5 0 0 0 0 0 0 0
21 西北区 西北区 陕西 2023 0 0 0 1 13 0 0 0 0 0 0 0
22 西南区 西南区 云南 2023 0 0 0 50 5 0 0 0 0 0 0 0
23 西南区 西南区 四川 2023 0 0 0 18 19 0 0 0 0 0 0 0
24 西南区 西南区 贵州 2023 0 0 0 9 0 0 0 0 0 0 0 0
25 西南区 西南区 重庆 2023 0 0 0 21 11 0 0 0 0 0 0 0
列转行
df = pd.DataFrame(['张三', 'XX大学', 'XX专业', 'XX年毕业'], columns=['info'], index=None)
print(df)
''' **************运行结果**************
info
0 张三
1 XX大学
2 XX专业
3 XX年毕业
'''
df = df['info'].str.split(',', expand=True).transpose()
print(df)
''' **************运行结果**************
0 1 2 3
0 张三 XX大学 XX专业 XX年毕业
'''
title = ['姓名', '学校', '专业', '毕业年份']
df.columns = title
print(df)
''' **************运行结果**************
姓名 学校 专业 毕业年份
0 张三 XX大学 XX专业 XX年毕业
'''
行转列
import pandas as pd
df = pd.DataFrame({'姓名': ['foo'], '学校': ['XX学校'], '专业': ['XX专业'], '毕业时间': ['2023年']})
df = df.rename(columns={'姓名': '姓名', '学校': '学校', '专业': '专业', '毕业时间': '毕业时间'})
df = df.transpose()
df = df.reset_index()
df = df.rename(columns={'index': None, 0: 'info'})
df = df.set_index(None)
print(df)
''' **************运行结果**************
info
姓名 张三
学校 XX大学
专业 XX专业
毕业年份 XX年毕业
'''