Разбор и сглаживание JSON, полученного из twitter API, с помощью python
Я собирал исторические данные Twitter для академических целей, и моя конечная цель - структурировать и упорядочить данные в Postgres. Однако я сталкиваюсь с некоторыми проблемами при сглаживании беспорядочных вложенных данных из API.
У меня есть куча файлов JSONL, которые я получал из каждого запроса API, и я пытался работать с этими данными, используя фреймы данных в python на Jupyter Notebook.
Каждый файл содержит вложенные файлы JSON:
import pandas as pd
import json
def load_jsonl(input_path) -> list:
"""
Read list of objects from a JSON lines file.
"""
data = []
with open(input_path, 'r', encoding='utf-8') as f:
for line in f:
data.append(json.loads(line.rstrip('\n|\r')))
print('Loaded {} records from {}'.format(len(data), input_path))
return data
data = load_jsonl(r"filepath")
db_data = []
db_cols = ['data', 'meta']
for d in data:
db_data.append([])
for col in db_cols:
db_data[-1].append(d.get(col, float('nan')))
df = pd.DataFrame(db_data, columns=db_cols)
вывод:dataframe
Затем я использую нормализацию JSON для распаковки вложенной части «данных»:
from pandas.io.json import json_normalize
df2 = json_normalize(data,record_path = ['data'], sep = '_', errors ='ignore')
Что дает мне такой результат: фрейм данных
Однако есть еще другие вложенные столбцы, которые я хотел бы сгладить, но я столкнулся с проблемами. Когда я применяю ту же функцию нормализации, я получаю ошибку «TypeError: строковые индексы должны быть целыми числами».
Я новичок в python, и я хотел бы понять, что происходит, и каковы возможности для решения этой проблемы. Другой уровень сложности заключается в том, что остальные вложенные столбцы имеют повторяющиеся записи, например:
[{'start': 0, 'end': 5, 'probability': 0.4693, 'type': 'Place', 'normalized_text': 'Lisboa'}, {'start': 14, 'end': 28, 'probability': 0.6417, 'type': 'Place', 'normalized_text': 'Av. de Brasília'}, {'start': 38, 'end': 54, 'probability': 0.7361, 'type': 'Place', 'normalized_text': 'Algés - Alcântara'}]
В общем, сейчас моя цель - сгладить столбцы, содержащие эти данные, и создать такие столбцы, как "normalized_text", в которых я бы получил список столбцов Lisboa, Av. де Бразилиа и Альжес-Алькантара.
Пожалуйста, дайте мне знать, если потребуется дополнительная информация, это мой первый пост в stackoverflow!