将 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 导入熊猫数据框错误的主要内容,如果未能解决你的问题,请参考以下文章