2016-08-31 12 views
5

Mam pandas DataFrame z dwiema kolumnami - jedną z nazwą pliku i godziną, w której została wygenerowana.Konwertuj pandy DataFrame do formatu JSON

File  Hour 

    F1   1 
    F1   2 
    F2   1 
    F3   1 

Próbuję przekonwertować go do pliku json z następującym formacie:

{“File”:”F1”,”Hour”:”1”} 
{“File”:”F1”,”Hour”:”2”} 
{“File”:”F2”,”Hour”:”1”} 
{“File”:”F3”,”Hour”:”1”} 

Kiedy używam dataframe.to_json poleceń (orient = „rekordami”), pojawia się w ewidencji poniższy format:

[{“File”:”F1”,”Hour”:”1”}, 
{“File”:”F1”,”Hour”:”2”}, 
{“File”:”F2”,”Hour”:”1”}, 
{“File”:”F3”,”Hour”:”1”}] 

Zastanawiam się, czy istnieje opcja pobrania pliku json w żądanym formacie. Każda pomoc będzie doceniona.

+1

Co chcesz nie jest właściwe 'json'. To, co otrzymasz z 'dataframe.to_json (orient =" records ")' jest poprawne 'json' – piRSquared

Odpowiedz

7

Dane wyjściowe otrzymane po DF.to_json to string. Możesz go po prostu podzielić zgodnie z wymaganiami i usunąć również przecinki.

out = df.to_json(orient='records')[1:-1].replace('},{', '} {') 

Aby zapisać dane wyjściowe do pliku tekstowego, można zrobić:

with open('file_name.txt', 'w') as f: 
    f.write(out) 
+0

Usuwa przecinki między dwiema parami kluczy: {" ServerGroup ":" Map "" Godzina ": 0}. Potrzebuję go {"ServerGroup": "Map", "Hour": 0}. – user3447653

+0

Tak, to był mój błąd. Spróbuj zmodyfikowanego. –

+0

Dzięki, że działa dobrze. Początkowo konwertowałem ramkę danych do pliku json i zapisałem ją w lokalnym pliku przy użyciu "df1.to_json (orient = 'records', ścieżka_lub_buf ="/content/tmp/GoogleCount.json ') [1: -1]. zastąpić('},{','} {')". Ale teraz po instrukcji replace pojawia się błąd "Obiekt NoneType" nie ma atrybutu "__getitem__" " – user3447653

3

myślę co PO szuka brzmi:

with open('temp.json', 'w') as f: 
    f.write(df.to_json(orient='records', lines=True)) 

To powinno załatwić sprawę.

0

W nowszych wersjach pand (0.20.0+, wierzę), można to zrobić bezpośrednio:

df.to_json('temp.json', orient='records', lines=True) 

bezpośrednie kompresja jest również możliwe:

df.to_json('temp.json.gz', orient='records', lines=True, compression='gzip')