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