Я бьюсь головой о стену. Я работаю с GeoDeepDive API и пытаюсь «привести в порядок» данные. Мой код:
import requests
import pandas as pd
response = requests.get("https://geodeepdive.org/api/articles?pubname_like=Geochronology")
data = response.json()
df = pd.json_normalize(data)
df = df['success.data']
dic = df[0]
df1 = pd.DataFrame.from_dict(dic)
df1.to_csv("output_file.csv")
Результат почти идеален, но вложенные json вызывают проблему, когда я получаю такие данные:
Вывод в формате CSV с двумя верхними строками, отредактированными вручную
Две верхние строки CSV — это результат, который я хочу получить, а две нижние — то, что я получаю. Мне нужно как-то "покопаться" в словарях.
Я пытаюсь перебрать эти конкретные столбцы фрейма данных и либо выбрать только URL-адрес, либо превратить имена в список имен. Я продолжаю получать ошибки во всем, что я пытаюсь сделать, и я думаю, что может быть даже лучший способ сделать это. Есть предположения?
Абсолютно! Я сейчас отредактирую вопрос.
Не могли бы вы попробовать, если это
...
df1 = pd.DataFrame.from_dict(dic)
df1.link = df1.link.apply(lambda l: l[0]['url'])
df1.author = df1.author.apply(lambda l: ';'.join(d['name'] for d in l))
df1.to_csv("output_file.csv")
соответствует вашим потребностям?
Абсолютно! Большое спасибо! Код... раздражающе тоже имеет смысл. Я теряюсь в индексации Python.
Не могли бы вы предоставить MRE (Как создать минимальный воспроизводимый пример , примеры минимального воспроизводимого (панды)) и немного конкретизировать ожидаемый результат.