Кажется, вы читаете файл json lines
, который может выглядеть примерно так:
{key1: value1, key2: [value2, value3, value4], key3: value3}
{key1: value4, key2: [value5, value6], key3: value7}
Обратите внимание на запятые в конце, и каждая строка сама по себе являетсядопустимый json
формат.
К счастью для вас, pandas может читать файл json lines
напрямую, например так:
pd.read_json('test.json', lines=True)
Поскольку имена ваших столбцов точно такие же, как у вашего json
ключи, вам не нужно заранее настраивать пустой DataFrame
.read_json
сделает все за вас.Пример:
df = pd.read_json('test.json', lines=True)
print(df)
abstract ... year
0 AdaBoost algorithm based on Haar-like features... ... 2016
1 In this paper, a kind of novel jigsaw EBG stru... ... 2016
[2 rows x 8 columns]
Еще более удачно, если вы ограничены размером, вы можете использовать аргумент chunksize
, который превращает метод .read_json
в генератор:
json_reader = pd.read_json('test.json', lines=True, chunksize=10000)
Теперь, когда вы перебираете json_reader
, каждый раз он выводит DataFrame
из следующих 10 000 строк из файла json
.Пример:
for j in json_reader:
print(j)
abstract ... year
0 AdaBoost algorithm based on Haar-like features... ... 2016
1 In this paper, a kind of novel jigsaw EBG stru... ... 2016
[2 rows x 8 columns]
abstract ... year
2 AdaBoost algorithm based on Haar-like features... ... 2016
3 In this paper, a kind of novel jigsaw EBG stru... ... 2016
[2 rows x 8 columns]
abstract ... year
4 AdaBoost algorithm based on Haar-like features... ... 2016
5 In this paper, a kind of novel jigsaw EBG stru... ... 2016
[2 rows x 8 columns]
Комбинируя все эти обретенные знания, вы можете использовать chunksize=10000
и выводить фрагмент DataFrame
как отдельный csv
, например, так:
for i, df in enumerate(json_reader):
df.to_csv('my_csv_file_{}'.format(i))
ЗдесьВы заметили, что я объединил функцию enumerate()
, чтобы мы могли получить индексный номер с автоинкрементом, и функцию str.format()
для добавления номера индекса к сгенерированному файлу csv
.
Вы можете увидетьпример здесь на Repl.it.