当我们需要对数据进行分析和建模时,数据的格式往往会影响到分析和建模的效率。宽表与窄表是数据格式的两种常见形式,宽表适合呈现各种指标的横向比较,而窄表适合呈现各种指标的纵向比较。在实际工作中可能会遇到需要将数据由宽表变成窄表的情况,这时候,我们可以使用Python的pandas数据处理包来处理数据。
下面是将宽表转换成窄表的完整攻略:
1. 数据采集与准备
首先需要采集和准备好需要进行处理的数据。常见的数据格式之一是宽表。
下面是一个宽表的示例:
年份 | 城市 | 房租 | 交通费 | 医疗费 |
---|---|---|---|---|
2020 | 北京 | 3000 | 2000 | 1000 |
2020 | 上海 | 2500 | 1800 | 800 |
2020 | 广州 | 2000 | 1500 | 600 |
2019 | 北京 | 2800 | 1800 | 900 |
2019 | 上海 | 2300 | 1500 | 700 |
2019 | 广州 | 1800 | 1200 | 500 |
2. 利用pandas进行数据转换
2.1 宽表转换成纵表
可以使用 pandas.melt() 方法进行宽表转换成纵表,转换后的结果如下:
import pandas as pd
df = pd.read_excel("data.xlsx", sheet_name="Sheet1")
df_melted = pd.melt(df, id_vars=["年份", "城市"], var_name="指标", value_name="数值")
print(df_melted)
输出结果如下:
年份 | 城市 | 指标 | 数值 |
---|---|---|---|
2020 | 北京 | 房租 | 3000 |
2020 | 上海 | 房租 | 2500 |
2020 | 广州 | 房租 | 2000 |
2019 | 北京 | 房租 | 2800 |
2019 | 上海 | 房租 | 2300 |
2019 | 广州 | 房租 | 1800 |
2020 | 北京 | 交通费 | 2000 |
2020 | 上海 | 交通费 | 1800 |
2020 | 广州 | 交通费 | 1500 |
2019 | 北京 | 交通费 | 1800 |
2019 | 上海 | 交通费 | 1500 |
2019 | 广州 | 交通费 | 1200 |
2020 | 北京 | 医疗费 | 1000 |
2020 | 上海 | 医疗费 | 800 |
2020 | 广州 | 医疗费 | 600 |
2019 | 北京 | 医疗费 | 900 |
2019 | 上海 | 医疗费 | 700 |
2019 | 广州 | 医疗费 | 500 |
2.2 窄表转换成宽表
可以使用 pandas.pivot() 方法进行窄表转换成宽表,转换后的结果如下:
df_pivot = df_melted.pivot(index=["年份", "城市"], columns="指标", values="数值")
print(df_pivot)
输出结果如下:
指标 | 交通费 | 医疗费 | 房租 |
---|---|---|---|
年份 | 城市 | ||
2019 | 北京 | 1800 | 900 |
广州 | 1200 | 500 | |
上海 | 1500 | 700 | |
2020 | 北京 | 2000 | 1000 |
广州 | 1500 | 600 | |
上海 | 1800 | 800 |
本文以pandas为例,简单介绍了如何将宽表转换成窄表和如何将窄表转换成宽表,这在实际工作中常用到。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python的pandas数据处理包将宽表变成窄表 - Python技术站