Панды выбирают, какие строки читать JSON - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть огромный JSON файл (множество файлов меньшего размера .log (JSON), объединенных вместе до общего объема 8 ГБ), состоящий из нескольких различных объектов (где каждый объект занимает строка). Я хочу прочитать этот файл в pandas dataframe. Меня интересует только сбор JSON записей для одного конкретного объекта (это резко уменьшит размер файла для чтения). Можно ли это сделать с помощью pandas или python перед чтением в dataframe?

Мой текущий код выглядит следующим образом:

import pandas as pd
import glob

df = pd.concat([pd.read_json(f, encoding = "ISO-8859-1", lines=True) for f in glob.glob("logs/sample1/*.log")], ignore_index=True)

Как вы можете себе представить, это очень сложно в вычислительном отношении и требует много времени для завершения. Есть ли способ обработать это перед чтением в dataframe?

Образец данных:

{"Name": "1","variable": "value","X": {"nested_var": 5000,"nested_var2": 2000}}
{"Name": "2","variable": "value","X": {"nested_var": 1222,"nested_var2": 8465}}
{"Name": "2","variable": "value","X": {"nested_var": 123,"nested_var2": 865}}
{"Name": "1","variable": "value","X": {"nested_var": 5500,"nested_var2": 2070}}
{"Name": "2","variable": "value","X": {"nested_var": 985,"nested_var2": 85}}
{"Name": "2","variable": "value","X": {"nested_var": 45,"nested_var2": 77}}

Я хочу читать только те случаи, когда name = 1

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать цикл для каждого файла, каждой строки и добавлять отфильтрованные строки к списку, последнее использование DataFrame contructor:

data = []
for file in glob.glob('logs/*.json'):
    with open(file) as f:
        for line in f:
            if json.loads(line)['Name'] == '1':
                data.append(json.loads(line))

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