数据的整理:使用Phthon对数据进行整理方便导入各类软件(如stata等)

前几天在处理大创需要的数据的时候,发现原始数据下载下来是这样:

原保险保费收入(万元)原保险保费收入(万元)原保险保费收入(万元)原保险保费收入(万元)原保险保费收入(万元)原保险保费收入(万元)
日期全国合计北京天津河北辽宁江苏
01-20065584071.68527391.92106848.41216499.65157439.23602208.82
02-20069972423.64817376.67187578.93378677.25283106.391138019.77
03-200616014688.681154082.41286093.71665783.89522588.731787257.91
04-200620454472.841465516.35373035.4866214.39681875.742178655.33
05-200624765561.331727176.84458865.661081607.1838824.282517199.71
06-200630802816.912094520.93565276.3313910311079048.452962686.45
07-200634242986.422363729.22630816.161546304.161193032.343234754.55

如果直接把这个表格导入到Python或者Stata,甚至使用Excel进行数据透视,都是非常不方便的。而且,我的导师还给了我另外一个表格,是关于各地气候变化的,要问把两个表的内容对齐。另外一个表长这样:

气温降雨量光照湿度最高温最低温
idTimetempresunhumexhexl
北京市1200401-2.30.7195369.2-12.9
北京市12004022.98.82143414.2-7.4
北京市12004037.80.12443222.7-5
北京市120040416.337.22484030.23.3
北京市120040520.539.12534433.210

 显然,第一个表和第二个表要合并的话,是需要经过整理的,对于每个数据,我们都需要知道它对应的时间、地区和类别,然后再使用pandas的merge方法或者其他的手段将两个表连接。

这是表1整理后的样子:

类型时间地区收入气温降雨量光照湿度最高温最低温
0原保险保费收入(万元)200601全国合计5584071.68
1原保险保费收入(万元)200602全国合计9972423.64
2原保险保费收入(万元)200603全国合计16014688.68
3原保险保费收入(万元)200604全国合计20454472.84
4原保险保费收入(万元)200605全国合计24765561.33
5原保险保费收入(万元)200606全国合计30802816.91
6原保险保费收入(万元)200607全国合计34242986.42
7原保险保费收入(万元)200608全国合计38209530.18
8原保险保费收入(万元)200609全国合计43091849.81
9原保险保费收入(万元)200610全国合计47002510.8

便于进一步的整理分析。

实现整理的过程可以通过Excel实现,也可以通过Python的xlrd和pandas等包实现。在这里我们采用的使用Python的方法。

import xlrd 
import xlwt
import pandas as pd

 首先导入需要使用到的包,包括xlrd和pandas

然后我们通过xlrd的open_workbook方法创建一个对象进行操作:

xls=xlrd.open_workbook("./保险收入数据.xls")
sheet=xls.sheets()[0]

在后续设计上,思路上主要是首先将数据排成一整列,存储到列表中,再将其相关信息分门别类进行循环同样存储到列表中去,最后全部使用insert方法导入到dataframe中去,再导出成为Excel表格。

income_list=[]
for col in range(1,166):
    for row in range(2,170) :
        data=sheet.cell(rowx=row,colx=col).value
        income_list.append(data)

循环主要借助的是将sheet对象中的每个值取出来,然后存入列表,在这里值得注意的有两个点:

1.循环的次序,如果循环的次序错了,可能每个值和相关的信息的对应就会出现问题;

2.在调用cell方法时,返回的是一个字典,类型:值,如number:10000,如果要取得值的话,一定要记得加上value

完整代码如下:

import xlrd 
import xlwt
import pandas as pd
import re

xls=xlrd.open_workbook("./保险收入数据.xls")
sheet=xls.sheets()[0]
income_list=[]
for col in range(1,166):
    for row in range(2,170) :
        data=sheet.cell(rowx=row,colx=col).value
        income_list.append(data)
region_list=[]
for col in range(1,34):
      region=sheet.cell(rowx=1,colx=col).value
      region_list.append(region)

print(region_list)
region_lists=[]
for j in range(5):
     for region in region_list:
          for i in range(168):
            region_lists.append(region)
date_list=[]
month_list=["01","02","03","04","05","06","07","08","09","10","11","12"]
for i in range(5):
    for region in region_list:
        for year in range(2006,2020):
            for month in month_list:
                date=str(year)+month
                date_list.append(date)
form_lists=[]
form_list=["原保险保费收入(万元)","财产保险保费收入(万元)","寿险保费收入(万元)","意外险保费收入(万元)","健康险保费收入(万元)"]
for form in form_list:
    for i in range(5544):
        form_lists.append(form)
df=pd.DataFrame()
df.insert(loc=0,value=form_lists,column='类型')
df.insert(loc=1,value=date_list,column='时间')
df.insert(loc=2,value=region_lists,column='地区')
df.insert(loc=3,value=income_list,column='收入')
print(df)

df.to_excel("./修改版.xls")

PS:由于是一个自用的小脚本,就没有写很多注释在里面,仅供参考。 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值