1. 简介
最近写论文要用stata做面板回归,需要对原始数据进行预处理。
原始数据是各省份的3个指标(Y,K,L),格式如图1。
stata需要的输入数据格式如图2(31省份9年,共计279行)。
图2 目标格式(279x5)
将任务分解,有三件工作要做:
(1)将各指标沿各自第一列方向拼接;
(2)做region列代表地区(279x1);
(3)做years列代表年份(279x1,每个年份重复31次)。
为方便处理,用excel将各指标第一行第一列剔除(如图3格式),并分开保存为3个csv文件。
在excel中做一个1到31的地区编号(31x1),保存为region.csv。
图3 输入csv格式
2. 步骤和代码
import pandas as pd
#读取csv
y = pd.read_csv("y.csv", header=None)
k = pd.read_csv("k.csv",header=None)
l = pd.read_csv("l.csv", header=None)
region = pd.read_csv("region.csv", header=None)
#(1)将各指标沿各自第一列方向拼接
def rs(table):
x = pd.Series()
for _ in range(9):
x = pd.concat([x, table.iloc[:, _]], axis = 0)
return(x)
y = rs(y)
k = rs(k)
l = rs(l)
#(2)做region列代表地区(279x1),保存为region1
region1 = pd.Series()
for i in range(9):
region1 = pd.concat([region1, region])
region1 = region1.iloc[:, 0]
#做years列代表年份(279x1,每个年份重复31次)
years = [2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016]
years = years*31
years = sorted(years)
years = pd.Series(years)
#合并前重新编码index防止报错
region1 = region1.reset_index(drop= True)
years = years.reset_index(drop= True)
y = y.reset_index(drop= True)
k = k.reset_index(drop= True)
l = l.reset_index(drop= True)
#合并,修改列名
data = pd.concat([region1, years,y, k, l], axis = 1)
data.columns = ['region', 'years', 'y', 'k', 'l']
#保存csv
data.to_csv('data.csv', index=False)
网友评论