Ошибка импорта JSON в pandas dataframe

У меня есть файл JSON следующего вида. Я хочу импортировать его как фреймворк pandas. Мои данные были экспортированы из рабочей среды MySQL.

[
  {
    "id" : 1,
    "reviewer_id" : 5,
    "reviewed_date" : "2010-07-25 21:47:40",
    "description" : "วันนี้  ผมพาท่านผู้อ่านมาลิ้มลองสเต๊กราคาย่อมเยาว์ แถวย่านพัฒนาการกันนะครับ\r\nร้าน Bkk Steak ที่พัฒนาการ 61 นี้ เปิดเมื่อปี 2551 ตอนนั้นยังเป็นห้องแถวห้องเดียว ไม่มีแอร์ด้วย จำได้ว่าที่ผมไปกินครั้งแรก ร้านบอกว่าเปิดถึงเที่ยงคืน!  (จะว่าไปก็ การกินของหนักๆ อย่างสเต๊กในเวลาดึกดื่นขนาดนี้ ไม่เป็นผลดีต่อสุขภาพแน่ๆ)  หลังๆ จึงร่นระยะเวลามาเปิดถึง 4 ทุ่มครึ่งแทน (ก็ยังดึกอยู่ดี) ด้วยรสชาติอาหารที่ดี ในราคาที่ถือว่าคุ้มค่ามาก (เริ่มต้นที่ 69 บาท) ทำให้มีลูกค้ามาทานอย่างต่อเนื่อง และภายในเวลาไม่ถึงปี ร้าน Bkk Steak ก็ย้ายจากห้องแถวเดิม ไปเปิดใหม่เป็นห้องแถว 2 คูหาฝั่งตรงข้ามแทน\r\n\r\nโฉมใหม่ของ Bkk Steak คือร้าน 2 คูหา ติดแอร์ แต่งร้านแบบเรียบง่าย ดูโปร่งและสะอาดตา รอบๆ ร้านมีภาพของสเต๊กเมนูต่างๆ พนักงานต้อนรับส่วนใหญ่เป็นผู้ชายครับ\r\n\r\nรายการอาหารในเมนูมีภาพประกอบเกือบทั้งหมด เริ่มต้นจากออเดิร์ฟเช่น ซุปครีมเห็ด (25 บาท)  กุ้งทอดสอดไส้ชีส (59 บาท) และสลัดทูน่า (49 บาท)  ส่วนพระเอกที่เป็นสเต๊กนั้นก็มีตั้งแต่สเต๊กหมูพริกไทยดำ  สเต๊กไก่สไปซี่ (ราคา 69 บาททั้งคู่)  ฟิชแอนด์ชิพส์  สเต๊กปลาดอลลี่ (79 บาท) ไปจนถึงจานที่ราคาแพงสุดของร้านคือ Steak T-Bone (589 บาท)  และแน่นอน ทางร้านมี combo set สเต๊ก 2 ชิ้นราคา 109/119 บาท หรือแบบ 4 ชิ้นในราคา 209/219 บาท ครับ \r\n\r\nผมสั่งเสต๊กไก่สไปซี่ อาหารจานโปรดของผม เพราะร้านเข้าให้ไก่ชิ้นใหญ่ดี ไก่หมักออกมกำลังดี รสชาติก็ไม่ถึงกับจัดจ้านมาก (คงต้องเผื่อไว้สำหรับคนกินเผ็ดมากไม่ได้) แต่กลิ่นที่หอมฉุยและเนื้อไก่นุ่มๆ นี่แหละที่ผมติดใจนัก  มีขนมปังอบเนย สลัดหย่อมเล็กๆ และเฟร้นช์ฟรายเป็นเครื่องเคียง ปิดท้ายด้วยเป๊บซี่เย็นๆ อีกหนึ่งแก้วก็อิ่มอร่อยไปอย่างสบายกระเป๋าครับ\r\n\r\nเยี่ยมร้านเมื่อ จันทร์ที่ 19 ก.ค. 2553  19.20 น.\r\nจำนวนแขก\t30 คน  (50% ของ capacity)\r\nจำนวนพนักงานเสิร์ฟ 5 คน\t\r\nเวลาที่ใช้รออาหารจานแรก 11 นาที\r\nอาหารที่สั่ง สเต๊กไก่สไปซี่ + โค้ก\r\nจ่ายไป 90 บาท\r\n\r\nจุดขาย ราคาและการบริการ\r\n\r\nหนึ่งเรื่องประทับใจ\tเวลาแขกผลักประตูเข้ามาในร้าน พนักงานทุกคนจะกล่าวสวัสดีทักทายแขกว่า “หวัดดีค้าบ ขอเชิญค้าบ” ได้อารมณ์คล้ายๆ กับ 7-11 เลยทีเดียว\t\r\n\r\nหนึ่งเรื่องที่อยากให้เปลี่ยน\tถ้าร้านให้เฟรนช์ฟรายเยอะกว่านี้จะดีมาก (อาจจะเป็น option พิเศษเพิ่มเงิน 10 บาทอะไรอย่างนี้น่ะครับ)\r\n\r\n",
    "rating" : 4
  },
  { 
    "id" : 2,
    "reviewer_id" : 5,
    "reviewed_date" : "2010-07-31 15:00:26",
    "description" : "ร้านคิวซังราเมน เป็นร้านขายราเมนญี่ปุ่นที่ถุกที่สุดที่ผมเคยได้ไปเยี่ยมเยือนครับ\r\n\r\nการเดินทางก็ค่อนข้างสะดวก เข้าซอยพัฒนาการ 61 มาประมาณ 50 เมตรก่อนถึงป้อมยามก็จะเจอร้านคิวซังอยู่ด้านซ้ายมือ\r\n\r\nภายในร้านตกแต่งเรียบง่าย จุแขกได้ประมาณ 30 คน แอร์เย็นฉ่ำดี\r\n\r\nอาหารจานโปรดของผมก็คือ คิวซังราเมน ชื่อเดียวกับร้านนั่นเอง ราคา 59 บาท ทีเด็ดของคิวซังราเมน คือน้ำซุปที่รสชาติกลมกล่อมเอามากๆ ไม่ต้องปรุงอะไรก็อร่อยทานได้ทันที แต่ถ้าชอบรสเผ็ดๆ หน่อยอย่างผมก็ใส่พริกป่นไปซักหนึ่งช้อนชาก็เรียบร้อยพร้อมทาน\r\n\r\nเคยไปกินราเมนร้านอื่น ชามเหยียบสองร้อย ผมว่ารสชาติก็สู้คิวซังราเมนไม่ได้ (หรือว่าลิ้นผมมันไม่ไฮโซพอหว่า)\r\n\r\nยังไง ถ้าอยากได้ทานราเมนเงียบๆ ราคาสบายกระเป๋า ก็มาลิ้มลองได้เลยครับ มีเมนู ราเมนร่วมสิบกว่าเมนู แล้วก็มีอาหารทานเล่นพวกเกี๋ยวซ่า ไก่คาราเกะ ยำสาหร่ายซึ่งรสชาติก็สอบผ่านทุกจานอยู่แล้วครับ\r\n",
    "rating" : 4
  }
]

Примечание: тексты в поле описания написаны на тайском языке.

Я выполнил следующий код.

data = pd.read_json("data/review.json",encoding = "utf-8")

Выход: «ValueError: ожидаемый объект или значение»

data = pd.read_json("data/review.json",encoding = "utf-8",orient='records',lines=True)

Выход: «ValueError: ожидаемый объект или значение»

pd.read_json("data/review.json",encoding = "utf-8",lines=True,chucksize=1000)

Выход: TypeError: read_json () получил неожиданный аргумент ключевого слова 'chucksize' "

with open('data/review.json',encoding = "utf8") as f:
     data = json.loads(f.read())
     data = pd.DataFrame(data)

Выход: "JSONDecodeError: недопустимый управляющий символ в строке 2110232, столбце 206"

with open('data/review.json',encoding = "utf8") as f:
     data = json.loads(f.read(),strict=False)
     data = pd.DataFrame(data)

Выход: "JSONDecodeError: Ожидаемое значение: строка 16591251 столбец 1 (символ 544624441)"

Как импортировать этот JSON в панды?

Примечание: моя версия pandas - 0.23.0.

Рекомендации:

Извините, но это работает на моей машине с двумя предоставленными записями. Вы, должно быть, где-то исказили JSON. Скопируйте и вставьте свои данные в jsonlint.com и посмотрите, в чем проблема.

cs95 10.06.2018 06:46

Спасибо за ваш совет. Я обнаружил, что некоторые пользователи использовали кавычки (") в поле описания (i.stack.imgur.com/pwqqu.png). Какой формат файла мне следует экспортировать? Я использовал для экспорта данных в формат csv, но есть некоторые пользователи, которые использовали запятые (,) в поле описания.

user9920003 10.06.2018 07:23

Ваш JSON искажен. Понятия не имею, как тебе помочь. Если бы файл был строками JSON, вы могли бы что-то спасти, но это самое худшее. Пожалуйста, дайте пинка тому, от кого вы получили эти дерьмовые данные.

cs95 10.06.2018 07:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
3
479
1

Ответы 1

Попробуй это. Это сработало для меня.

import pandas as pd
# Load the first sheet of the JSON file into a data frame
data_df = pd.read_json('reviewsclean.json', lines=True)

Другие вопросы по теме