Python处理二维的dataframe数据主要依靠pandas包。这一点与R语言不同,R中处理dataframe的包是多面开花。不过现在这些处理函数慢慢有语法大一统的趋势,如tidyverse生态链。
在处理数据常常会遇到长宽数据互转,如从Wind数据库导出的公司财务数据。在Stata和R中已经有比较便捷的处理方法。
下面列示一下pandas包的处理方法。
首先,生成一份模拟数据。
1 | 复制代码import pandas as pd |
然后开始从长转为宽。
1 | 复制代码df=df.melt(id_vars=['stkcd','x'],value_vars=['lev2015','roa2015', 'roa2016', 'lev2016','lev2017'],var_name='name',value_name='score') |
但是仔细一看,还需要再转一次。把name分割为两个变量。
1 | 复制代码df['year']=df['name'].str.slice(3,7) |
此时把name转回去即可(从变量的转成列变量的名)。这个就是我们想要的数据,不信你可以用df.to_csv(‘wide_long.csv’)导出数据试试看。具体如下。
1 | 复制代码df=df.pivot_table(index=['stkcd','x','year'], columns='name', values='score') |
不过呢,这个数据太难看了。进一步处理如下。
1 | 复制代码df=df.reset_index() |
最后附图(点击可以放大)。一般的长宽型都可以按照这个思路操作,只是会根据语言工具的差异略有调整。
操作过程与版本信息
示意图
问:为什么模拟那么丑的df?
答:有时候现实的df就很丑。
问:为什么这么写?麻烦,长。
答:通用,不惧df的美丑。
问:有更好的操作么😝
答:靠你自动手🤗
本文转载自: 掘金