Pandas多维数据转一维数据,一维数据转多维数据,列与行的转置操作

一、多维转一维

1、数据准备在Excel中

Pandas多维数据转一维数据,一维数据转多维数据,列与行的转置操作_第1张图片

2、使用Pandas转换

# 导包
import pandas as pd
# 读取Excel中数据
df = pd.read_excel('./各区域数据.xlsx')
# id_vars:不需要进行一维转变的列字段,可以为列表或者str单个列字段,
# value_vars:列表,从第几列开始转(列表切片别搞错,左包由闭)
# var_name:转成一维列的字段名,如上数据:1月-12月为一列,列字段名为:月份,可以不写,默认variable
# value_name:转成一维列的值的字段名,如上数据:1月-12月列中的数据名:人员,可以不写,默认value
df = pd.melt(df, id_vars=['大区', '地区', '省份', '年份'],
             value_vars=df.columns[4:], var_name='月份', value_name='人员')
# 导出Excel文件
df.to_excel('./各区域数据-转一维.xlsx')
print(df)
**************运行结果**************

      大区    地区   省份    年份   月份  人员
0    东北区   东北区  黑龙江  2023   115
1    华东区   华东区   江西  2023   12
2    华东区   华东区   浙江  2023   14
3    华东区   华东区   山东  2023   16
4    华南区  华南A区   湖南  2023   122
..   ...   ...  ...   ...  ...  ..
307  西北区   西北区   新疆  2023  120
308  西北区   西北区   甘肃  2023  120
309  西北区   西北区   宁夏  2023  120
310  华南区  华南B区   海南  2023  120
311  西南区   西南区   重庆  2023  120

[312 rows x 6 columns]

二、一维转多维

1、直接使用上面已经转好的一维数据转多维

import pandas as pd
# 读取Excel中数据
df = pd.read_excel('./各区域数据-转一维.xlsx')
# values:需要转多维的值的列名称
# index:保持不变的列名称
# columns:需要转多维的列的名称,同时索引名会被该值取代
df = pd.pivot_table(
    df, values='人数',
    index=['大区', '地区', '省份', '年份'],
    columns='月份').reset_index()
# 修改索引列字段名为空
df.columns.name = ''
# 或者重新赋值各列字段名
# df.columns = df.columns.values
df.to_excel('./各区域数据-转多维.xlsx')
print(df)
**************运行结果**************

     大区    地区   省份    年份  1011121234567890   东北区   东北区   吉林  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年']})
# 重命名columns
df = df.rename(columns={'姓名': '姓名', '学校': '学校', '专业': '专业', '毕业时间': '毕业时间'})
# 转置
df = df.transpose()
# 重置index
df = df.reset_index()
# 将index别名映射为空,列名(0表示第一列)根据自己需求映射
df = df.rename(columns={'index': None, 0: 'info'})
# 重置index
df = df.set_index(None)
print(df)
''' **************运行结果**************
		info
	姓名	张三
	学校	XX大学
	专业	XX专业
	毕业年份	XX年毕业
'''

你可能感兴趣的:(Python,pandas,python,开发语言)