问题描述
import pandas as pd
json_data_raw = [{"indicator_value":{"195606":
{"2010":{"AFG": 0.29,"ZWE": 0.607},"2011": {"AFG": 0.406,"ZWE": 0.737},"2012": {"AFG": 0.345,"ZWE": 0.587},"2013": {"AFG": 0.28,"ZWE": 0.871},"2014": {"AFG": 0.253,"ZWE": 0.88},"2015": {"AFG": 0.262,"2016": {"AFG": 0.245,"ZWE": 0.77},"2017": {"AFG": 0.247,"ZWE": 0.845},"2018": {"AFG": 0.254,"ZWE": 0.849}}},"country_name": {"AFG": "Afghanistan","ZWE": "Zimbabwe"},"indicator_name": {"195606": "Carbon dioxide emissions,production emissions per capita (tonnes)"}}]
当我尝试使用 pd.read_json
方法读取此结构时,我设法仅加载数据的第一个节点,即 "indicator_value"
、"country_name"
和 "indicator_name"
以及嵌套的仅实例。
我也尝试使用 pd.json_normalize
也没有成功,因为我不太明白如何指定包含在我的 json object
中的参数 record_path 或 Meta(元数据)并得到奇怪的结果。>
等其他country/year/values...
可能这不仅仅是一项任务,还会涉及其他类型的对象操作。 无论如何,我非常感谢您的帮助。
解决方法
首先创建一个名为variable
的{{1}}....基本上它包含了内部的d
dictionary
现在创建一个 d=json_data_raw[0]
:-
dataframe df
所以这里 df=pd.DataFrame(list(list(d.values())[0].values())[0])
有 3 层更深的 list(list(d.values())[0].values())[0]
现在,
dictionary
注意:-在这里您可以覆盖 df=df.stack().to_frame()
或创建一个新的 df
上面的代码创建了一个 variable
以便删除 multi index dataframe
我们使用:-
multi index
现在重命名列:-
df.reset_index(inplace=True)
现在我们将创建一个函数,将 country_code 列更改为国家名称,即
df.columns=['country_code','year','Carbon dioxide emssions,production emission per capita(tonnes)']
现在我们将使用 def country(val):
if val=='AFG':
return 'Afganistan'
else:
return 'Zimbabwe'
方法
apply()
现在最后我们将在 country=df['country_code'].apply(country)
dataframe df
现在如果你打印 df.insert(0,'country_name',country)
你会得到你想要的输出
输出:-
df
注意:- 好吧,我创建了一个 country_name country_code year Carbon dioxide emssions,production emission per capita(tonnes)
0 Afganistan AFG 2010 0.290
1 Afganistan AFG 2011 0.406
2 Afganistan AFG 2012 0.345
3 Afganistan AFG 2013 0.280
4 Afganistan AFG 2014 0.253
5 Afganistan AFG 2015 0.262
6 Afganistan AFG 2016 0.245
7 Afganistan AFG 2017 0.247
8 Afganistan AFG 2018 0.254
9 Zimbabwe ZWE 2010 0.607
10 Zimbabwe ZWE 2011 0.737
11 Zimbabwe ZWE 2012 0.587
12 Zimbabwe ZWE 2013 0.871
13 Zimbabwe ZWE 2014 0.880
14 Zimbabwe ZWE 2015 0.880
15 Zimbabwe ZWE 2016 0.770
16 Zimbabwe ZWE 2017 0.845
17 Zimbabwe ZWE 2018 0.849
因为在您的 function
对象中只有 2 个国家/地区,如果您的国家/地区超过 2 个并且您有相同的json
格式然后代码 before 我定义/创建 json
照原样工作。
然后而不是制作 function country()
然后使用 function
方法
使用这个:-
apply()
现在,如果您打印 countryinfo=list(json_data_raw[0].values())[1]
,您会得到一个 countryinfo
,其中 dictionary
是国家代码,其 keys
是国家名称
values
的输出:-
countryinfo
好吧,在 {'AFG': 'Afghanistan','ZWE': 'Zimbabwe'}
之前,我们正在获取存储在您的 list(json_data_raw[0].values())[1]
中的 "country_name"
的数据,并将其存储在名为国家信息的 json object:- json_data_raw
中
现在
variable
所以这里基本上我们用 country=df['country_code'].replace(countryinfo.keys(),countryinfo.values())
的值替换 df['country_code']
的值,因此它将返回 countryinfo dictionary
的值,我们将 Series
存储在 { {1}} 名为 Series
最后没有我们 variable
列在 country
insert 'country_name'
index 0
现在,如果您打印 df,那么无论您在 dataframe df
中拥有多少个国家/地区,您都将获得所需的输出
df.insert(0,country)
的输出:-
json_data_raw