You can use pd.DataFrame to expand the JSON/dict in column address into a dataframe of the JSON/dict contents. Then, join with the original dataframe using .join(), as follows:
Optional step: If your JSON/dict are actually strings, convert them to proper JSON/dict first. Otherwise, skip this step.
import ast
df['address'] = df['address'].map(ast.literal_eval)
Main codes:
import pandas as pd
df[['name', 'age']].join(pd.DataFrame(df['address'].tolist(), index=df.index).add_prefix('address.'))
Result:
name age address.number address.street address.city
1 Steve 27 4 Main Road Oxford
2 Adam 32 78 High St Cambridge
Alternatively, if you have only a few columns to add from the JSON/dict, you can also add them one by one, using the string accessor str[], as follows
df['address.number'] = df['address'].str['number']
df['address.street'] = df['address'].str['street']
df['address.city'] = df['address'].str['city']
Setup
import pandas as pd
data = {'name': {1: 'Steve', 2: 'Adam'},
'age': {1: 27, 2: 32},
'address': {1: {"number": 4, "street": "Main Road", "city": "Oxford"},
2: {"number": 78, "street": "High St", "city": "Cambridge"}}}
df = pd.DataFrame(data)