美文网首页
用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