使用嵌套字典填充缺失值
Fill missing values using a nested dictionary
这是我的示例数据框:
df = pd.DataFrame(data=[[3, np.nan, np.nan],[5, np.nan, np.nan]], index=['country1', 'country2'], columns=[2021, 2022, 2023])
这是我的示例词典:
d = {'country1': {'key1': 'a', 'key2': 'assumed','key3': {2022: '10', 2023: ' 20'}}, 'country2': {'key1': 'b', 'key2': 'assumed', 'key3': {2022: '30', 2023: ' 40'}}}
我的目标是使用字典 d 来替换数据框 df 中的缺失值。我以为我会使用类似的东西:
df.fillna(d2)
其中 d2 是基于字典 d:
的字典
d2 = {'country1': {2022: '10', 2023: ' 20'}, 'country2': {2022: '30', 2023: ' 40'}}
我不知道如何生成 d2,但无论如何都行不通。
结果如下所示:
pd.DataFrame(data=[[3, 10, 20],[5, 30, 40]], index=['country1', 'country2'], columns=[2021, 2022, 2023])
而不是使用 df.fillna(d2)
,看起来最好的实现方式如下:
for country,country_dict in d.items():
for year,value in country_dict['key3'].items():
df.loc[country,year] = value
我们仍然可以使用 fillna
但在此之前我们必须 normalize/transform 字典格式适合 fillna
df.T.fillna({k: v['key3'] for k, v in d.items()}).T
结果
2021 2022 2023
country1 3.0 10 20
country2 5.0 30 40
这是我的示例数据框:
df = pd.DataFrame(data=[[3, np.nan, np.nan],[5, np.nan, np.nan]], index=['country1', 'country2'], columns=[2021, 2022, 2023])
这是我的示例词典:
d = {'country1': {'key1': 'a', 'key2': 'assumed','key3': {2022: '10', 2023: ' 20'}}, 'country2': {'key1': 'b', 'key2': 'assumed', 'key3': {2022: '30', 2023: ' 40'}}}
我的目标是使用字典 d 来替换数据框 df 中的缺失值。我以为我会使用类似的东西:
df.fillna(d2)
其中 d2 是基于字典 d:
的字典d2 = {'country1': {2022: '10', 2023: ' 20'}, 'country2': {2022: '30', 2023: ' 40'}}
我不知道如何生成 d2,但无论如何都行不通。
结果如下所示:
pd.DataFrame(data=[[3, 10, 20],[5, 30, 40]], index=['country1', 'country2'], columns=[2021, 2022, 2023])
而不是使用 df.fillna(d2)
,看起来最好的实现方式如下:
for country,country_dict in d.items():
for year,value in country_dict['key3'].items():
df.loc[country,year] = value
我们仍然可以使用 fillna
但在此之前我们必须 normalize/transform 字典格式适合 fillna
df.T.fillna({k: v['key3'] for k, v in d.items()}).T
结果
2021 2022 2023
country1 3.0 10 20
country2 5.0 30 40