Разбор и сглаживание 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!

0 ответов

Другие вопросы по тегам