Чтение только определенных полей из большого JSON и импорт в Pandas Dataframe - PullRequest
0 голосов
/ 10 января 2019

У меня есть папка с более или менее 10 файлами json размером от 500 до 1000 Мб. Каждый файл содержит около 1.000.000 строк, например, loffowling:

{ 
    "dateTime": '2019-01-10 01:01:000.0000'
    "cat": 2
    "description": 'This description'
    "mail": 'mail@mail.com'
    "decision":[{"first":"01", "second":"02", "third":"03"},{"first":"04", "second":"05", "third":"06"}] 
    "Field001": 'data001'
    "Field002": 'data002'
    "Field003": 'data003'
    ...
    "Field999": 'data999'
}

Моя цель - проанализировать его с помощью панд, поэтому я хотел бы сохранить данные, поступающие из всех файлов, в Dataframe. Если я зацикливаю все файлы, происходит сбой Python, потому что у меня нет свободных ресурсов для управления данными.

Что касается моей цели, мне нужен только Dataframe с двумя столбцами cat и dateTime из всех файлов, который, как я полагаю, легче, чем целый Dataframe со всеми столбцами, которые я пытался прочитать только эти две колонки со следующим фрагментом:

Примечание: в данный момент я работаю только с одним файлом, и когда я получу код быстрого считывателя, я зациклюсь на всех других файлах (A.json, B.json, ...)

import pandas as pd
import json
import os.path
from glob import glob

cols = ['cat', 'dateTime']
df = pd.DataFrame(columns=cols)

file_name='this_is_my_path/File_A.json'
with open(file_name, encoding='latin-1') as f:
    for line in f:
        data=json.loads(line)
        lst_dict=({'cat':data['cat'], 'dateTime':data['dateTime']})
        df = df.append(lst_dict, ignore_index=True)

Код работает, но он очень очень медленный, поэтому для одного файла требуется более одного часа, а чтение всего файла и сохранение его в Dataframe обычно занимает 8-10 минут.

Есть ли способ прочитать только два конкретных столбца и быстрее добавить их в Dataframe?

Я попытался прочитать весь файл JSON и сохранить его в Dataframe, а затем отбросить все столбцы, кроме 'cat' и 'dateTime', но он кажется слишком тяжелым для моего MacBook.

1 Ответ

0 голосов
/ 10 января 2019

Поможет ли это?

Шаг 1. Прочитайте ваш файл JSON от панд "pandas.read_json ()"
Шаг 2. Затем отфильтруйте 2 столбца из фрейма данных.

Дайте мне знать, если у вас все еще есть проблемы. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...