美文网首页
用python预处理面板数据

用python预处理面板数据

作者: 伏星宇 | 来源:发表于2019-10-12 11:22 被阅读0次
deadline是第一生产力

1. 简介

最近写论文要用stata做面板回归,需要对原始数据进行预处理。
原始数据是各省份的3个指标(Y,K,L),格式如图1
stata需要的输入数据格式如图2(31省份9年,共计279行)。

图1 Y数据原始格式(K、L与之类似)
图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)

相关文章

网友评论

      本文标题:用python预处理面板数据

      本文链接:https://www.haomeiwen.com/subject/etxqmctx.html