У меня есть папка с более или менее 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.