Для меня решение для секунд работает хорошо - только необходимые числа во вложенных ключах являются строками:
d_dict = {'Status' : { '4':'Married', '5':'UnMarried'},
'Country': { '2': 'Japan' , '3': 'China'},
'Income': {'3': "5000-10000", '2': "11000-20000"}}
df = df.astype(str).replace(d_dict)
print (df)
id Status Country Income
0 1 Married Japan 5000-10000
1 2 UnMarried China 11000-20000
Так что вы можете попробовать преобразовать вложенные ключи в строки:
d_dict = {'Status' : { '4':'Married', '5':'UnMarried'},
'Country': { '2': 'Japan' , '3': 'China'},
'Income': {3: "5000-10000", 2: "11000-20000"}}
d_dict = {k: {str(k1): v1 for k1, v1 in v.items()} for k,v in d_dict.items()}
df = df.astype(str).replace(d_dict)
print (df)
id Status Country Income
0 1 Married Japan 5000-10000
1 2 UnMarried China 11000-20000
Или преобразовать все ключи к целым числам:
d_dict = {k: {int(k1): v1 for k1, v1 in v.items()} for k,v in d_dict.items()}
df = df.replace(d_dict)
print (df)
id Status Country Income
0 1 Married Japan 5000-10000
1 2 UnMarried China 11000-20000