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 |
北京市 |
地级区划 |