두 줄 이상의 JSON이 포함 된 파일을 Pandas에로드


92

JSON 파일을 Python pandas (0.14.0) 데이터 프레임으로 읽으려고합니다. 다음은 JSON 파일의 첫 번째 줄입니다.

{"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"}

다음을 시도하고 있습니다 : df = pd.read_json(path).

다음 오류가 발생합니다 (전체 추적 포함).

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

Trailing data오류 는 무엇입니까 ? 데이터 프레임으로 어떻게 읽습니까?

몇 가지 제안에 따라 다음은 .json 파일의 몇 줄입니다.

{"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"}

이 .json 파일에는 사양에 따라 각 줄에 하나의 JSON 개체가 포함되어 있습니다.

제안 된대로 jsonlint.com 웹 사이트를 시도했는데 다음과 같은 오류가 발생합니다.

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

1
JSON 개체의 일부가 아닌 파일에 추가 데이터가 있습니다.
Martijn Pieters

json 파일의 마지막 몇 줄은 어떻게 생겼습니까?
Bryan Oakley

2
이 예제는 pandas 0.16.0에서 잘 읽습니다. 어떤 버전의 팬더를 사용하고 있습니까?
Andy Hayden 2015 년

1
@ user62198 0.16.0 업데이트, read_json에 대한 몇 가지 수정 사항이 있습니다.
Andy Hayden 2015 년

1
@Cornel Ghiban, 전체 파일을로드하거나 개별 행에서 읽을 수 있습니다. 5 백만 개가 넘는 레코드가 있으므로 언급 한 형식으로 변환하는 것이 약간 어려울 수 있습니다.
user62198

답변:


240

Pandas 버전 0.19.0부터 lines다음과 같이 매개 변수를 사용할 수 있습니다 .

import pandas as pd

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

lines논쟁 과 관련된이 문제의 해결 방법을 얻는 방법을 아십니까? github.com/pandas-dev/pandas/issues/15132

33

한 줄씩 읽어야합니다. 예를 들어, 당신이 제공하는 다음과 같은 코드를 사용할 수 있습니다 ryptophan레딧를 :

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)

안녕하세요, un json 파일을 읽고 데이터 프레임에 저장하려고합니다. 그러나 코드를 사용할 때 "TypeError : sequence item 0 : expected str instance, bytes found"라는 오류가 발생했습니다. 그게 무슨 문제인지 아십니까?
ngoduyvu

3

다음 코드는 JSON콘텐츠를 에로드하는 데 도움이되었습니다 dataframe.

import json
import pandas as pd

with open('Appointment.json', encoding="utf8") as f:
    data = f.readlines()
    data = [json.loads(line) for line in data] #convert string to dict format
df = pd.read_json(data) # Load into dataframe

1

비슷한 문제가있었습니다.

그것은이 밝혀 pd.read_json(myfile.json)자동으로 상위 폴더에서 검색합니다,하지만 당신은 파일과 같은 폴더에하지 않으면 오류 '데이터 후행'을이를 반환합니다.

내가 함께 할하려고 할 때 때문에, 그것을 생각 open('myfile.json', 'r')하고, 내가 가지고 FileNotFound내가 경로를 확인할 수 있도록, 오류가 발생했습니다.

myfile.json을 노트북과 같은 폴더로 옮기지 못했습니다.

pd.read_json('../myfile.json')그냥 작동 하도록 변경하십시오 .


1
를 제공 ValueError: Trailing data해야 할 때 a를 제공한다는 것은 어리석은 일입니다 FileNotFound. 이것은 나에게도 일어났습니다.
ProGirlXOXO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.