Skip to content
Advertisement

how to obtain key pair values from an API JSON column – Jupyter Notebook

after exploring one row in an API example, I found the whole information

df['items'][0]

{'tags': ['perl'],
 'owner': {'reputation': 93,
  'user_id': 6536089,
  'user_type': 'registered',
  'accept_rate': 0,
  'profile_image': 'https://www.gravatar.com/avatar/f8b30a65d171e2a305745589dc02caba?s=256&d=identicon&r=PG&f=1',
  'display_name': 'andy',
  'link': 'https://stackoverflow.com/users/6536089/andy'},
 'score': 0,
 'last_activity_date': 1658173974,
 'creation_date': 1658110836,  # <----
 'last_edit_date': 1658173974, # <----
 'question_id': 73016722}

I been using this code to obtain the creation_date values:

df['items'].apply(lambda value : value['creation_date'] if isinstance(value, dict) else np.nan)

Here is where I got stuck. I found that some rows doesn’t have last_edit_date values.

When I try to run the same code using the name last_edit_date I get an error.

df['items'].apply(lambda value : value['last_edit_date'] if isinstance(value, dict) else np.nan)

KeyError: ‘last_edit_date’

Advertisement

Answer

You can simplify your code a lot by using Series.str.get:

Given:

                                               items
0  {'tags': ['perl'], 'owner': {'reputation': 93,...

Doing:

df['last_edit_date'] = df['items'].str.get('last_edit_date')
print(df)

Output:

                                               items  last_edit_date
0  {'tags': ['perl'], 'owner': {'reputation': 93,...      1658173974
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement