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

原保险保费收入(万元)

原保险保费收入(万元)

原保险保费收入(万元)

原保险保费收入(万元)

原保险保费收入(万元)

原保险保费收入(万元)

日期

全国合计

北京

天津

河北

辽宁

江苏

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:由于是一个自用的小脚本,就没有写很多注释在里面,仅供参考。