进度

今天完整地进行了行业维度的清洗分析,把行业代码根据国家标准清洗出格式为  “编码·门类·大类·中类·小类”  的数据格式

过程

1、先把国家标准编码转化为json数据

2、根据原始数据编码逐层遍历json数据,补全缺失数据和问题数据。

代码

  1 import pandas as pd
2 import xlwt
3 rank10="" #A
4 rank11="" #A的名字
5 rank20=""
6 rank21=""
7 rank30=""
8 rank31=""
9 rank40=""
10 rank41=""
11 finalstr=""
12 def std_excel():
13 # dict={"A":{"01":{"011":"谷物种植","0111":"稻谷种植"} ,
14 # "02":{"021":"林木育种和育苗","0211":"林木育种"}},
15 #
16 # "B":{"06":{ "0610":"烟煤和无烟煤开采洗选","0620":"褐煤开采洗选"},
17 # "07":{"0710":"石油开采","0720":"天然气开采"}}
18 # }
19
20 # layer1=dict['A']
21 # print("第一层 A:\n",layer1)
22 #
23 # layer2 = dict['A']['01']
24 # print("第二层 01农业:\n", layer2)
25 #
26 # layer3 = dict['A']['01']["011"]
27 # print("第三层 :\n", layer3)
28 #读取标准文件
29 df = pd.read_excel('GBT4754-2011.xlsx')
30 #首先寻找第一层大写字母层的数据 定位行loc[] 定位
31 # print(df.columns.values[0]) #A
32 my_dict={"A":{}}
33 new_dict={"A":
34 {"农、林、牧、渔业":
35 {"01":
36 {"农业":
37 {"001":
38 {"谷物种植":
39 {
40 "0111":"稻谷种植","0112":"小麦种植"
41 }
42 }
43 }
44 }
45 }
46 }
47 }
48 # new_dict["A"].update(
49 # {df.loc[0].values[0]:df.loc[0].values[1]}
50 # )
51 # print("excel表的行数:\n",len(df.index.values))
52 # print("测试字典:\n",new_dict)
53 # print(df.loc[80].values)
54 # print("一个单元格数据的数据类型:\n",type(df.loc[0].values[0]))
55
56 #测试完毕 开始构建行业领域分类字典
57 industry_json={}
58 #开始遍历表格 0 - 1423
59 for i in range(len(df.index.values)):
60 #由于表格的第一列数据被判定为int型 所以要转化成str
61 temp=df.loc[i].values
62 one = str(temp[0])
63 # print(len(one))
64 two = str(temp[1])
65 # print("数据格式:\n",type(temp[0]))
66 #通过判断values[0]的字符串的长度判断处于字典的哪一层 如果长度是1 那么在第一层门类 如果长度是2那么在第二层大类 如果长度是3那么在第三层中类
67 if(len(one)==1):
68 global rank10
69 global rank11
70 rank10=one
71 rank11=two
72 my_dict.update({rank10:{rank11:{}}})
73 if(len(one)==2):
74 global rank20
75 global rank21
76 rank20 = one
77 rank21 = two
78 my_dict[rank10][rank11].update({rank20:{rank21:{}}})
79 if (len(one) == 3):
80 global rank30
81 global rank31
82 rank30 = one
83 rank31 = two
84 my_dict[rank10][rank11][rank20][rank21].update({rank30:{rank31:{}}})
85 #这里做了代码的前三位字符串切分,为了判断一下有没有小类跳过中类的情况,需要直接跨过中类存储,少了一层字典{}
86 if (len(one) == 4):
87 global rank40
88 global rank41
89 rank40 = one
90 rank41 = two
91 divide_rank40=rank40[:3]
92 # print(divide_rank40,rank30)
93 if(divide_rank40==rank30):
94 # print("!!!!!~~~~~~~~~~~~")
95 my_dict[rank10][rank11][rank20][rank21][rank30][rank31].update({rank40:rank41})
96 else:
97 my_dict[rank10][rank11][rank20][rank21].update({rank40: rank41})
98 #得到最终的字典my_dict
99 # print(my_dict.keys())
100 # print(my_dict)
101 return my_dict
102 def is_excit(qb03):
103 global finalstr
104 #设置个标记,初始值False 说明默认找不到这个编码 如果找到了则设为 True 如果最终是False则重新分割字符串回调函数
105 flag = False
106 #获取字典
107 my_dict={}
108 my_dict.update(std_excel())
109 # print(my_dict)
110 #门类KEY
111 category=""
112 #大类
113 big_class=""
114 #中类
115 medium_class=""
116 #小类
117 small_class=""
118 # 遍历第一层 门类
119
120 for items in my_dict.items():
121 res = ""
122 for layer_0 in items[1].items():
123 # print("门类:\n",layer_0)
124 # print("门类名称:\n",layer_0[0])
125 category=layer_0[0]
126 """
127 --------------------------------------------------
128 """
129 # 遍历第二层大类
130 """
131 每进入一层遍历第一个for循环是进入一个这样格式的数据 ( 编码:{ } )
132 之后第二个for循环进入那个字典{ }
133 字典构建的方式是 上一层是key 下一层是对应的value 同时它作为下一层的key
134
135 """
136 #进入第一层(A:{ } )
137 for layer_10 in layer_0[1].items():
138 # print("大类编码(两位):\n",layer_10[0])
139 #进入A对应的{ }
140 for layer_11 in layer_10[1].items():
141 # print("大类:\n",layer_11)
142 big_class = layer_11[0]
143 # 自己调用自己补全缺失值
144 if(len(qb03)==2 and qb03==layer_10[0]):
145 print("缺失值补全:\n", finalstr)
146 flag=True
147 res = finalstr + "·" + category + "·" + big_class + "·" + big_class + "·" + big_class
148 # print(res)
149 return res
150 # print("大类名称:\n",big_class)
151 """
152 --------------------------------------------------
153 """
154 #进入大类(01,{ })
155 for layer_20 in layer_11[1].items():
156 #进入01对应的 { }
157 #判断第二层下一级的名称是三位还是四位,如果是三位那么是正常的中类划分,如果是四位,那么是跳过了中类划分到了小类
158 if(len(layer_20[0])==4):
159 small_class=layer_20[1]
160 # print("大类直接分到小类:\n",small_class)
161 #判断字符串
162 if(qb03==layer_20[0]):
163 print("跨过中类的小类,判断成功!",qb03)
164 flag=True
165 res = qb03+ "·"+ category + "·" + big_class + "·"+small_class+ "·"+small_class
166 return res
167 else:
168 #这个分支的意思是有的类别只到了大类,没有中类直接分到了四位数的小类,所以必须分开遍历,字符串不能按字典遍历
169 for layer_21 in layer_20[1].items():
170 # print("中类:\n",layer_21)
171 medium_class = layer_21[0]
172 # print("中类名称:\n",medium_class)
173 # 这里是个大坑,我的遍历是进入值的那一层,编码在上一级的遍历 layer_20[0]
174 if (qb03 == layer_20[0]):
175 print("三位中类判断成功!", qb03)
176 flag=True
177 res = qb03 + "·" + category + "·" + big_class + "·" + medium_class+ "·" + medium_class
178 return res
179 #继续划分到小类
180 for layer_30 in layer_21[1].items():
181 #这个layer_30就是最后一层的四位数数据了 格式: ('0111', '稻谷种植') 是一个tuple 索引0是编码1是名称
182 small_class=layer_30[1]
183 # print("小类名称:\n",small_class)
184 #--------------------------------------------------------------------------------
185 # 判断字符串
186 if (qb03 == layer_30[0]):
187 print("正常四位小类判断成功!", qb03)
188 flag=True
189 res=qb03+"·"+category+"·"+big_class+"·"+medium_class+"·"+small_class
190 return res
191 if(flag==False):
192 finalstr = qb03
193 new_qb03=qb03[:2]
194 return is_excit(new_qb03)
195 def clean():
196 """
197 1、读取源数据表格
198 2、逐个把数据传入is_exist()方法获得返回值存回excel表格
199 :return:
200 """
201 df=pd.read_excel("2013_year_data.xlsx")
202 # print(df.loc[0].values)
203 res=[]
204 temp_res=""
205 #range(len(df.index.values))
206 for i in range(len(df.index.values)):
207 # print(df.loc[i].values[0])
208 temp_res=is_excit(str(df.loc[i].values[0]))
209 print(temp_res)
210 if(temp_res!=None):
211 res.append(temp_res)
212 else:
213 res.append(str(df.loc[i].values[0]))
214 # print(res)
215 #把结果存储到excel表
216 workbook = xlwt.Workbook(encoding='utf-8')
217 sheet = workbook.add_sheet('sheet1', cell_overwrite_ok=True)
218 sheet.col(0).width=256*100
219 sheet.write(0, 0, "data")
220 for i in range(len(res)):
221 sheet.write(i+1, 0, res[i])
222 workbook.save('2013_res_data.xls')
223 return None
224 if __name__ == '__main__':
225 # print()
226 #311 2662 610
227 # res=is_excit("610")
228 # print("----------------------")
229 # print(res)
230 # print("----------------------")
231
232 clean()

部分json数据(格式)

 1 {
2 'A': {
3 '农、林、牧、渔业': {
4 '01': {
5 '农业': {
6 '011': {
7 '谷物种植': {
8 '0111': '稻谷种植',
9 '0112': '小麦种植',
10 '0113': '玉米种植',
11 '0119': '其他谷物种植'
12 }
13 },
14 '012': {
15 '豆类、油料和薯类种植': {
16 '0121': '豆类种植',
17 '0122': '油料种植',
18 '0123': '薯类种植'
19 }
20 },
21 '013': {
22 '棉、麻、糖、烟草种植': {
23 '0131': '棉花种植',
24 '0132': '麻类种植',
25 '0133': '糖料种植',
26 '0134': '烟草种植'
27 }
28 },
29 '014': {
30 '蔬菜、食用菌及园艺作物种植': {
31 '0141': '蔬菜种植',
32 '0142': '食用菌种植',
33 '0143': '花卉种植',
34 '0149': '其他园艺作物种植'
35 }
36 },
37 '015': {
38 '水果种植': {
39 '0151': '仁果类和核果类水果种植',
40 '0152': '葡萄种植',
41 '0153': '柑橘类种植',
42 '0154': '香蕉等亚热带水果种植',
43 '0159': '其他水果种植'
44 }
45 },
46 '016': {
47 '坚果、含油果、香料和饮料作物种植': {
48 '0161': '坚果种植',
49 '0162': '含油果种植',
50 '0163': '香料作物种植',
51 '0169': '茶及其他饮料作物种植'
52 }
53 },
54 '0170': '中药材种植',
55 '0190': '其他农业'
56 }
57 },
58 '02': {
59 '林业': {
60 '021': {
61 '林木育种和育苗': {
62 '0211': '林木育种',
63 '0212': '林木育苗'
64 }
65 },
66 '0220': '造林和更新',
67 '0230': '森林经营和管护',
68 '024': {
69 '木材和竹材采运': {
70 '0241': '木材采运',
71 '0242': '竹材采运'
72 }
73 },
74 '025': {
75 '林产品采集': {
76 '0251': '木竹材林产品采集',
77 '0252': '非木竹材林产品采集'
78 }
79 }
80 }
81 },

 完整版行业分类 关注订阅号【靠谱杨阅读人生】回复【行业】获取

python 处理国家标准行业编码(编码·门类·大类·中类·小类)的更多相关文章

  1. 小白的Python之路 day1 字符编码

    字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...

  2. python之旅:字符编码

    一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...

  3. python进阶10 MySQL补充 编码、别名、视图、数据库修改

    python进阶10 MySQL补充    编码.别名.视图.数据库修改 一.编码问题 #MySQL级别编码 #修改位置: /etc/mysql/mysql.conf.d/mysqld.cnf def ...

  4. python 3 学习字符串和编码

    字符串和编码 阅读: 895464 字符编码 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字 ...

  5. python(10)- 字符编码

    一 什么是编码? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种表示称为“明文”(plain text).对于说英语的人,纸张上打印的或屏幕上显示的英 ...

  6. python基础——6(字符编码,文件操作)

    今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 *****     2.字符与字节: 字符占多少字节,字符串转化 ***     3.文件操作: 操作硬盘中的一块区域:读写操作  ...

  7. python(4)- 字符编码

    一 什么是编码? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种表示称为“明文”(plain text).对于说英语的人,纸张上打印的或屏幕上显示的英 ...

  8. python文件操作:字符编码与文件处理

    一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...

  9. python 2和3 字符编码

    在字符编码问题上,python2 和python3 还是有点不同的.今日写篇博客,彻底理清这个问题.. 字符编码问题的由来: 这要从计算发展历史来看待这个问题了,一开始,歪果仁使用ASCII码,8位( ...

  10. Python基础之字符串和编码

    字符串和编码 字符串也是一种数据类型,但是字符串比较特殊的是还有个编码问题. 因为计算机自能处理数字,如果徐娅处理文本,就必须先把文本转换为数字才能处理,最早的计算机子设计时候采用8个比特(bit)作 ...

随机推荐

  1. spring boot+layui分页实战

    项目用了layui,做了个简单的图书搜索页,分享出来. 喜欢的朋友给点个赞!!! 实现效果 开发步骤 1.前端页面和JS <!DOCTYPE html> <html xmlns=&q ...

  2. 使用@ControllerAdvice统一处理自定义异常

    最近工作中涉及到捕捉AOP方法中抛出的异常. 想针对某一种异常做一个统一的处理器并封装好异常信息以JSON格式交给前端进行提示. 主要实现的话有以下几步: 1.编写自定义异常类 package com ...

  3. python基础语法知识

    1.多组输入没有结束标志的两种表示形式 #method1: try: while True: #代码 except EOFError: pass #method2: while True: try: ...

  4. 深入理解Go语言(01): interface源码分析

    分析接口的赋值,反射,断言的实现原理 版本:golang v1.12 interface底层使用2个struct表示的:eface和iface 一:接口类型分为2个 1. 空接口 //比如 var i ...

  5. Java的SPI机制实践

    Java SPI机制概述 先给出结论:"Java的SPI是一种服务发现机制,用于约定接口和动态发现实现类,体现了分层解耦的思想". Java的SPI机制常用于框架扩展或组件替换,最 ...

  6. 2019年在浏览器用原生js写WebGL,绘制图形;

    因为JavaScript高级程序设计(第三版)中的运行书上15.3WebGL部分的代码时在chrome和firefox浏览器下报错,在后面我网上初步找了一圈,好像没人做出真正可以用的代码;所以我就自己 ...

  7. day04---系统重要文件

    系统重要的文件 /etc的重要文件 1./etc/sysconfig/network-scripts/ifcfg-eth0 [root@localhost ~]# cat /etc/sysconfig ...

  8. C#程序全局异常处理—WPF和Web API两种模式

    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目, 后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享. Web A ...

  9. Java static关键字的小练习

    1 package com.bytezreo.statictest; 2 3 /** 4 * 5 * @Description static 关键字的使用 小练习 6 * @author Byteze ...

  10. OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

    前言   通过相机图片可以识别出棋盘角点了,这时候我们需要通过角点去计算相机内参矩阵,通过上篇得知畸变的原理,所以我们尽可能要全方位都能获取标定图片,全方位意思是提供的多张图综合起来基本覆盖了相机所有 ...