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

一、多维转一维

1、数据准备在Excel中

在这里插入图片描述

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年毕业
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tian丶Yuting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值