丞相弩的pandas笔记实战篇——表格合并与分析

pandas表格合并

先拿出几个表格

df_raw

df_raw = pd.read_csv("fsnd_zb_data.tsv",encoding='utf8',sep='\t',
                     keep_default_na=False,na_values='na_rep',
                     index_col=[0,1,2])
display(df_raw)
data
zb reg sj
A010101 110000 2018 NaN
2017 NaN
2016 NaN
2015 NaN
2014 NaN
... ... ... ...
A0S0B05 650000 2013 33.856600
2012 24.914044
2011 NaN
2010 NaN
2009 NaN

df_meta

df_meta = pd.read_csv("fsnd_zb_meta.tsv",encoding='gbk',sep='\t',
                      keep_default_na=False,na_values='na_rep',
                      index_col=[0])
display(df_meta)
cname dotcount exp ifshowcode memo name nodesort sortcode tag unit
code
A010101 地级区划数 0 指地级行政单位即介于省级和县级之间的一级地方行政区域的个数,包括地区、自治州、行政区和盟。 False 地级区划数 1 2
A010102 地级市数 0 市是省、自治区内人口较集中,政治、经济、文化等方面较重要的城市。市人民政府为一级地方行政组织... False 地级市数 1 3
A010103 县级区划数 0 县级行政单位指中国地方二级行政区域,是地方政权的基础。县级行政单位包括县、自治县、旗、自治旗... False 县级区划数 1 4
A010104 市辖区数 0 市辖区(简称区)城市基层政权组织的行政区域。直辖市和较大的市多将市区范围划分为若干区,设立区... False 市辖区数 1 5
A010105 县级市数 0 县级市是中国大陆行政区划名称,行政地位与县相同的县级行政区 False 县级市数 1 6
... ... ... ... ... ... ... ... ... ... ...
A0S0B01 城乡居民社会养老保险参保人数 1 False 城乡居民社会养老保险参保人数 1 3355 万人
A0S0B02 城乡居民社会养老保险实际领取待遇人数 1 False 城乡居民社会养老保险实际领取待遇人数 1 3356 万人
A0S0B03 城乡居民社会养老保险基金收入 1 False 城乡居民社会养老保险基金收入 1 3357 亿元
A0S0B04 城乡居民社会养老保险基金支出 1 False 城乡居民社会养老保险基金支出 1 3358 亿元
A0S0B05 城乡居民社会养老保险累计结余 1 False 城乡居民社会养老保险累计结余 1 3359 亿元

df_reg

df_reg = pd.read_csv("reg_treeId_level2.tsv",encoding='utf8',sep='\t',
                     keep_default_na=False,na_values='na_rep',
                     index_col=[0])
display(df_reg)
dbcode exp id isParent name open pid wd
i
0 fsnd 110000 True 北京市 False 100001 reg
1 fsnd 120000 True 天津市 False 100001 reg
2 fsnd 130000 True 河北省 False 100001 reg
3 fsnd 140000 True 山西省 False 100001 reg
4 fsnd 150000 True 内蒙古自治区 False 100001 reg
... ... ... ... ... ... ... ... ...
7 fsnd 610000 True 陕西省 False 900003 reg
8 fsnd 620000 True 甘肃省 False 900003 reg
9 fsnd 630000 True 青海省 False 900003 reg
10 fsnd 640000 True 宁夏回族自治区 False 900003 reg
11 fsnd 650000 True 新疆维吾尔自治区 False 900003 reg

替换数据

准备工作

我们用to_dict()方法可以把表格变成字典

地区字典
地区字典 = df_reg.set_index("id")['name'].to_dict()
地区字典
>>> {110000: '北京市',
 120000: '天津市',
 130000: '河北省',
 140000: '山西省',
 150000: '内蒙古自治区',
 210000: '辽宁省',
 ······
 610000: '陕西省',
 620000: '甘肃省',
 630000: '青海省',
 640000: '宁夏回族自治区',
 650000: '新疆维吾尔自治区'}
指标字典
指标字典 = df_meta['cname'].to_dict()
指标字典
>>> {'A010101': '地级区划数',
 'A010102': '地级市数',
 'A010103': '县级区划数',
 'A010104': '市辖区数',
 'A010105': '县级市数',
 'A010106': '县数',
 'A010107': '自治县数',
 'A010108': '乡镇级区划数',
 'A010109': '镇数',
 'A01010A': '乡数',
 ······
 'A0B0104': '城市市辖区年末总人口为100-200万的地级及以上城市数',
 'A0B0105': '城市市辖区年末总人口为50-100万的地级及以上城市数',
 'A0B0106': '城市市辖区年末总人口为20-50万的地级及以上城市数',
 'A0B0107': '城市市辖区年末总人口为20万以下的地级及以上城市数',
 'A0B0201': '城区面积',
 ...}
开始替换数据

替换索引(包括后面的替换数据)的方法,就是set_index() 把某一列“骗”到索引的部分,用rename(index={}) 对索引进行修改,之后用reset_index() 将索引放回原位。循环反复,知道改完了所有该改的内容为止。

df = df_raw.reset_index().set_index('zb').rename(index=指标字典)
df
reg sj data
zb
地级区划数 110000 2018 NaN
地级区划数 110000 2017 NaN
地级区划数 110000 2016 NaN
地级区划数 110000 2015 NaN
地级区划数 110000 2014 NaN
... ... ... ...
城乡居民社会养老保险累计结余 650000 2013 33.856600
城乡居民社会养老保险累计结余 650000 2012 24.914044
城乡居民社会养老保险累计结余 650000 2011 NaN
城乡居民社会养老保险累计结余 650000 2010 NaN
城乡居民社会养老保险累计结余 650000 2009 NaN
df = df.reset_index().set_index('reg').rename(index=地区字典)
df
zb sj data
reg
北京市 地级区划数 2018 NaN
北京市 地级区划数 2017 NaN
北京市 地级区划数 2016 NaN
北京市 地级区划数 2015 NaN
北京市 地级区划数 2014 NaN
... ... ... ...
新疆维吾尔自治区 城乡居民社会养老保险累计结余 2013 33.856600
新疆维吾尔自治区 城乡居民社会养老保险累计结余 2012 24.914044
新疆维吾尔自治区 城乡居民社会养老保险累计结余 2011 NaN
新疆维吾尔自治区 城乡居民社会养老保险累计结余 2010 NaN
新疆维吾尔自治区 城乡居民社会养老保险累计结余 2009 NaN
df_zh = df.reset_index().rename(columns = {"zb":"指标","reg":"地区","sj":"年份","data":"数据",})
df_zh
地区 指标 年份 数据
0 北京市 地级区划数 2018 NaN
1 北京市 地级区划数 2017 NaN
2 北京市 地级区划

你可能感兴趣的:(pandas,数据分析,python,数据分析,列表,深度学习)