2015-03-11 26 views
5

Я начал с чтения CSV в Pandas Data Frame с помощью функции pandas read_csv(). Теперь, когда данные в реальном кадре данных, я пытался написать что-то вроде этого:Пишите Pandas DataFrame в Line-Delineated JSON

for row in df.iterrows(): 
    row[1].to_json(path_to_file) 

Это работает, но только последняя строка сохраняется на диск, потому что я был переписывание файла каждый раз я делаю вызовите строку [1] .to_json (path_to_file). Я пробовал несколько других параметров обработки файлов, но безрезультатно. Может ли кто-нибудь пролить свет на то, как действовать дальше?

Спасибо!

+0

У вас есть образец ввода/вывода ... есть два способа написания DF, которые, как я могу думать, могут быть полезными - иначе вы просто пытаетесь написать конкретный столбец? –

+0

DataFrame является, по существу, табличным представлением данных. Какова структура JSON? – Alexander

ответ

7

Вы можете передать буфер, чтобы df.to_json():

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame({"a":[1,3,5], "b":[1.1,1.2,1.2]}) 

In [3]: df 
Out[3]: 
    a b 
0 1 1.1 
1 3 1.2 
2 5 1.2 

In [4]: f = open("temp.txt", "w") 

In [5]: for row in df.iterrows(): 
    row[1].to_json(f) 
    f.write("\n") 
    ...:  

In [6]: f.close() 

In [7]: open("temp.txt").read() 
Out[7]: '{"a":1.0,"b":1.1}\n{"a":3.0,"b":1.2}\n{"a":5.0,"b":1.2}\n' 
+0

Это сработало отлично, спасибо! Если бы у меня было 15 репутации, я бы поднял ваш ответ. – uspowpow

+0

Рад помочь. Не нужно повышать, вы можете просто принять этот ответ как правильный. – Noah

+0

Ной, это будет глупый вопрос, но как я могу это прочитать в Pandas DF? Я пробовал с открытым ('jason_lines_file') как f: для строки в f: pd.read_json (строка) – uspowpow

1

Если вы пытаетесь написать DF с помощью iterrows - Я подозреваю, что вы должны смотреть на:

df.to_json(orient='records') # List of lists of values 
# [[1, 2], [3,4]] 

Или:

df.to_json(orient='records') # List of dicts with col->val 
# [{'A': 1, 'B': 2}, {'A': 3, 'B': 4}] 

Или написав Dict из {индекс: значение Col }:

+2

Решение # 1 df.to_json (orient = 'records') отлично, за исключением того, что записи разделены запятой, и мне нужно, чтобы они были разделены по строкам. Любые другие предложения? И я не понимаю разницы между вашим первым решением и вашим вторым решением - я думаю, что это тот же код :) – uspowpow

5

Для создания новой строки разделителем JSON из dataframe df, выполните следующие действия

df.to_json("path/to/filename.json", 
      orient="records", 
      lines=True) 

Обратите пристальное внимание на те дополнительные ключевые слова арг! Опция lines была добавлена ​​в pandas 0.19.0.

Смежные вопросы