2015-05-06 24 views
25

Bir json dosyasında pandalar veri çerçevesine okumaya çalışıyorum. İşte json dosyasının ilk satırı çizgisidir:Python'un Panda'larına birden fazla JSON içeren bir dosya yükleniyor

{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "P_Mk0ygOilLJo4_WEvabAA", "review_id": "OeT5kgUOe3vcN7H6ImVmZQ", "stars": 3, "date": "2005-08-26", "text": "This is a pretty typical cafe. The sandwiches and wraps are good but a little overpriced and the food items are the same. The chicken caesar salad wrap is my favorite here but everything else is pretty much par for the course.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"} 

Yapmak çalışıyorum aşağıdadır: Trailing data hatası nedir

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 198, in read_json 
    date_unit).parse() 
    File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 266, in parse 
    self._parse_no_numpy() 
    File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 483, in _parse_no_numpy 
    loads(json, precise_float=self.precise_float), dtype=None) 
ValueError: Trailing data 

geçerli: df = pd.read_json(path) Ben (tam traceback ile) aşağıdaki hatayı alıyorum ? Bir veri çerçevesine nasıl okurum?

DÜZENLEME:

{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "P_Mk0ygOilLJo4_WEvabAA", "review_id": "OeT5kgUOe3vcN7H6ImVmZQ", "stars": 3, "date": "2005-08-26", "text": "This is a pretty typical cafe. The sandwiches and wraps are good but a little overpriced and the food items are the same. The chicken caesar salad wrap is my favorite here but everything else is pretty much par for the course.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"} 
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "TNJRTBrl0yjtpAACr1Bthg", "review_id": "qq3zF2dDUh3EjMDuKBqhEA", "stars": 3, "date": "2005-11-23", "text": "I agree with other reviewers - this is a pretty typical financial district cafe. However, they have fantastic pies. I ordered three pies for an office event (apple, pumpkin cheesecake, and pecan) - all were delicious, particularly the cheesecake. The sucker weighed in about 4 pounds - no joke.\n\nNo surprises on the cafe side - great pies and cakes from the catering business.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"} 
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "H_mngeK3DmjlOu595zZMsA", "review_id": "i3eQTINJXe3WUmyIpvhE9w", "stars": 3, "date": "2005-11-23", "text": "Decent enough food, but very overpriced. Just a large soup is almost $5. Their specials are $6.50, and with an overpriced soda or juice, it's approaching $10. A bit much for a cafe lunch!", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"} 

kullanıyorum Bu .json dosya şartnamesine göre her satırında bir json nesnesi içerir: bazı önerilerde ardından , burada .json dosyasının birkaç çizgilerdir. önerildiği gibi

Ben jsonlint.com web sitesi çalıştı ve aşağıdaki hatayı veriyor: Sen satır satır okumak zorunda

Parse error on line 14: 
...t7sRT4zwdbzQ8KQmw"}{ "votes": { 
----------------------^ 
Expecting 'EOF', '}', ',', ']' 
+1

Sen ek veriye sahip JSON nesnesinin parçası olmayan dosya. –

+0

Json dosyasının son birkaç satırı neye benziyor? –

+0

Gösterdiğiniz json geçerliyken, ilk önce yapmanız gereken, geçersiz verilerden zaman kaybetmeden önce http://jsonlint.com/ (veya benzer bir araç) çalıştırmanızdır. –

cevap

60

Pandalar sürümü 0.19.0 itibaren şöyle, lines parametresini kullanabilirsiniz:

import pandas as pd 

data = pd.read_json('/path/to/file.json', lines=True) 
+4

Bu kabul edilen yanıt haline gelmelidir –

+0

Bu sorunun geçici çözümüyle ilgili nasıl bir çözüm bulacağına dair herhangi bir fikriniz var mı? https://github.com/pandas-dev/pandas/issues/15132 – Chuck

30

. Örneğin, reddit üzerinde ryptophan tarafından sağlanan aşağıdaki kodu kullanabilirsiniz:

import pandas as pd 

# read the entire file into a python array 
with open('your.json', 'rb') as f: 
    data = f.readlines() 

# remove the trailing "\n" from each line 
data = map(lambda x: x.rstrip(), data) 

# each element of 'data' is an individual JSON object. 
# i want to convert it into an *array* of JSON objects 
# which, in and of itself, is one large JSON object 
# basically... add square brackets to the beginning 
# and end, and have all the individual business JSON objects 
# separated by a comma 
data_json_str = "[" + ','.join(data) + "]" 

# now, load it into pandas 
data_df = pd.read_json(data_json_str) 
+0

Çok teşekkürler @Artem. – user62198

+0

Harika, teşekkürler! – pelumi

+0

Bu cevaba bir bira verilmeli. – Botond

İlgili konular