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