将 JSON 导入熊猫数据框错误

Posted

技术标签:

【中文标题】将 JSON 导入熊猫数据框错误【英文标题】:Import JSON into pandas dataframe error 【发布时间】:2018-11-19 16:38:18 【问题描述】:

我有一个如下的 JSON 文件。我想将它作为熊猫数据框导入。我的数据是从 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() got an unexpected keyword argument 'chucksize' "

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

输出: "JSONDecodeError: Invalid control character at: line 2110232 column 206"

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

输出:“JSONDecodeError:预期值:第 16591251 行第 1 列(char 544624441)”

如何将此 JSON 导入 pandas?

注意:我的 pandas 版本是 0.23.0。

参考资料:

Reading Json file as Pandas Dataframe error ValueError: Expected object or value when reading json as pandas dataframe Python json.loads fails with `ValueError: Invalid control character at: line 1 column 33 (char 33) Add chunksize param to read_json when lines=True #17168 pandas.read_json documentation

【问题讨论】:

对不起,但这在我的机器上工作,并提供了两条记录。您必须在其他地方使用格式错误的 JSON。复制粘贴你的数据到jsonlint.com,看看问题出在哪里。 感谢您的建议。我发现有些用户在描述字段(i.stack.imgur.com/pwqqu.png)中使用了引号(“)。我应该导出什么文件格式?我以前将数据导出为csv格式,但有些用户在描述字段中使用逗号(,) . 您的 JSON 格式错误。我不知道如何帮助你。如果文件是 JSON 行,你可以挽救一些东西,但这绝对是最糟糕的。请给你从谁那里得到这些糟糕数据的人一脚。 【参考方案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)

【讨论】:

以上是关于将 JSON 导入熊猫数据框错误的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫数据框可视化为热图时出现类型错误

试图将数据从网站导入熊猫

如何使用熊猫根据列的值范围分离数据框?

将熊猫数据框转换为 json

关键错误多索引数据框熊猫

将熊猫数据框列表转换为 json