前几天在处理大创需要的数据的时候,发现原始数据下载下来是这样:
原保险保费收入(万元) | 原保险保费收入(万元) | 原保险保费收入(万元) | 原保险保费收入(万元) | 原保险保费收入(万元) | 原保险保费收入(万元) | ||
日期 | 全国合计 | 北京 | 天津 | 河北 | 辽宁 | 江苏 | |
01-2006 | 5584071.68 | 527391.92 | 106848.41 | 216499.65 | 157439.23 | 602208.82 | |
02-2006 | 9972423.64 | 817376.67 | 187578.93 | 378677.25 | 283106.39 | 1138019.77 | |
03-2006 | 16014688.68 | 1154082.41 | 286093.71 | 665783.89 | 522588.73 | 1787257.91 | |
04-2006 | 20454472.84 | 1465516.35 | 373035.4 | 866214.39 | 681875.74 | 2178655.33 | |
05-2006 | 24765561.33 | 1727176.84 | 458865.66 | 1081607.1 | 838824.28 | 2517199.71 | |
06-2006 | 30802816.91 | 2094520.93 | 565276.33 | 1391031 | 1079048.45 | 2962686.45 | |
07-2006 | 34242986.42 | 2363729.22 | 630816.16 | 1546304.16 | 1193032.34 | 3234754.55 |
如果直接把这个表格导入到Python或者Stata,甚至使用Excel进行数据透视,都是非常不方便的。而且,我的导师还给了我另外一个表格,是关于各地气候变化的,要问把两个表的内容对齐。另外一个表长这样:
气温 | 降雨量 | 光照 | 湿度 | 最高温 | 最低温 | |||
id | Time | tem | pre | sun | hum | exh | exl | |
北京市 | 1 | 200401 | -2.3 | 0.7 | 195 | 36 | 9.2 | -12.9 |
北京市 | 1 | 200402 | 2.9 | 8.8 | 214 | 34 | 14.2 | -7.4 |
北京市 | 1 | 200403 | 7.8 | 0.1 | 244 | 32 | 22.7 | -5 |
北京市 | 1 | 200404 | 16.3 | 37.2 | 248 | 40 | 30.2 | 3.3 |
北京市 | 1 | 200405 | 20.5 | 39.1 | 253 | 44 | 33.2 | 10 |
显然,第一个表和第二个表要合并的话,是需要经过整理的,对于每个数据,我们都需要知道它对应的时间、地区和类别,然后再使用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:由于是一个自用的小脚本,就没有写很多注释在里面,仅供参考。