Reputation: 33
I'm sorry, I am new to Python and wondering if anyone can help me with extracting data? I've been trying to extract data from a df with json-content.
0 [{'@context': 'https://schema.org', '@type': '...
1 [{'@context': 'https://schema.org', '@type': '...
2 [{'@context': 'https://schema.org', '@type': '...
3 [{'@context': 'https://schema.org', '@type': '...
4 [{'@context': 'https://schema.org', '@type': '...
5 [{'@context': 'https://schema.org', '@type': '...
So rows look like this:
"[{'@context': 'https://schema.org', '@type': 'Audiobook', 'bookFormat': 'AudiobookFormat', 'name': 'Balle-Lars og mordet i Ugledige 1858', 'description': '<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt.</p><p>Lars Peter Poulsen (1866-1941) var en dansk lærer og forfatter.</p>', 'image': '/images/e/200x200/0002496352.jpg', 'author': [{'@type': 'Person', 'name': 'L.P. Poulsen'}], 'readBy': [], 'publisher': {'@type:': 'Organization', 'name': ''}, 'isbn': '', 'datePublished': '', 'inLanguage': 'da', 'aggregateRating': {'@type': 'AggregateRating', 'ratingValue': 3.56, 'ratingCount': 9}}, {'@context': 'https://schema.org', '@type': 'Book', 'bookFormat': 'EBook', 'name': 'Balle-Lars og mordet i Ugledige 1858', 'description': '<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt.</p>', 'image': '/images/e/200x200/0002496352.jpg', 'author': [{'@type': 'Person', 'name': 'L.P. Poulsen'}], 'publisher': {'@type:': 'Organization', 'name': 'SAGA Egmont'}, 'isbn': '9788726519877', 'datePublished': '2021-06-21', 'inLanguage': 'da', 'aggregateRating': {'@type': 'AggregateRating', 'ratingValue': 3.56, 'ratingCount': 9}}]"
What I want is to get some of the keys (e.g. 'name') from the json data, for all rows. I've been trying:
for d in unsorted:
print (d["name"])
... and variations. Is that the way to go (somehow) or should I convert everything to json and go from there?
Thank you!
Upvotes: 0
Views: 52
Reputation: 13582
Considering that the dataframe looks like this
df = pd.DataFrame({'json_data': ['[{"@context": "https://schema.org", "@type": "Audiobook", "bookFormat": "AudiobookFormat", "name": "Balle-Lars og mordet i Ugledige 1858", "description": "<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt, da hun stod ved vinduet i sin stue efter at være kommet hjem fra et begravelsesg."}]',
'[{"@context": "https://schema.org", "@type": "Audiobook", "bookFormat": "AudiobookFormat", "name": "Balle-Lars og mordet i Ugledige 1858", "description": "<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt, da hun stod ved vinduet i sin stue efter at være kommet hjem fra et begravelsesg."}]',
'[{"@context": "https://schema.org", "@type": "Audiobook", "bookFormat": "AudiobookFormat", "name": "Balle-Lars og mordet i Ugledige 1858", "description": "<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt, da hun stod ved vinduet i sin stue efter at være kommet hjem fra et begravelsesg."}]',
'[{"@context": "https://schema.org", "@type": "Audiobook", "bookFormat": "AudiobookFormat", "name": "Balle-Lars og mordet i Ugledige 1858", "description": "<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt, da hun stod ved vinduet i sin stue efter at være kommet hjem fra et begravelsesg."}]',
'[{"@context": "https://schema.org", "@type": "Audiobook", "bookFormat": "AudiobookFormat", "name": "Balle-Lars og mordet i Ugledige 1858", "description": "<p>I 1858 blev der begået et mord i Ugledige mellem Præstø og Vordingborg. Den 58-årige enke Ane Marie Hemmingsdatter blev skudt, da hun stod ved vinduet i sin stue efter at være kommet hjem fra et begravelsesg."}]'] })
[Out]:
json_data
0 [{"@context": "https://schema.org", "@type": "...
1 [{"@context": "https://schema.org", "@type": "...
2 [{"@context": "https://schema.org", "@type": "...
3 [{"@context": "https://schema.org", "@type": "...
4 [{"@context": "https://schema.org", "@type": "...
And assuming that OP's goal is just to obtain a list with the names, one can get it as follows
import json as js
name_list = [js.loads(x)[0]['name'] for x in df['json_data'].tolist()]
[Out]:
['Balle-Lars og mordet i Ugledige 1858', 'Balle-Lars og mordet i Ugledige 1858', 'Balle-Lars og mordet i Ugledige 1858', 'Balle-Lars og mordet i Ugledige 1858', 'Balle-Lars og mordet i Ugledige 1858']
If OP wants to store the names on a different column, called name
, of the dataframe df
, then one can do the following
import json as js
df['name'] = [js.loads(x)[0]['name'] for x in df['json_data'].tolist()]
[Out]:
json_data name
0 [{"@context": "https://schema.org", "@type": "... Balle-Lars og mordet i Ugledige 1858
1 [{"@context": "https://schema.org", "@type": "... Balle-Lars og mordet i Ugledige 1858
2 [{"@context": "https://schema.org", "@type": "... Balle-Lars og mordet i Ugledige 1858
3 [{"@context": "https://schema.org", "@type": "... Balle-Lars og mordet i Ugledige 1858
4 [{"@context": "https://schema.org", "@type": "... Balle-Lars og mordet i Ugledige 1858
Upvotes: 1