ValueError:将json读取为熊猫数据框时的预期对象或值

Posted

技术标签:

【中文标题】ValueError:将json读取为熊猫数据框时的预期对象或值【英文标题】:ValueError: Expected object or value when reading json as pandas dataframe 【发布时间】:2017-11-01 09:22:44 【问题描述】:

样本数据


   "_id": "OzE5vaa3p7",
   "categories": [
      
         "__type": "Pointer",
         "className": "Category",
         "objectId": "nebCwWd2Fr"
      
   ],
   "isActive": true,
   "imageUrl": "https://firebasestorage.googleapis.com/v0/b/shopgro-1376.appspot.com/o/Barcode%20Data%20Upload%28II%29%2FAnil_puttu_flour_500g.png?alt=media&token=9cf63197-0925-4360-a31a-4675f4f46ae2",
   "barcode": "8908001921015",
   "isFmcg": true,
   "itemName": "Anil puttu flour 500g",
   "mrp": 58,
   "_created_at": "2016-10-02T13:49:03.281Z",
   "_updated_at": "2017-02-22T08:48:09.548Z"



   "_id": "ENPCL8ph1p",
   "categories": [
      
         "__type": "Pointer",
         "className": "Category",
         "objectId": "B4nZeUHmVK"
      
   ],
   "isActive": true,
   "imageUrl": "https://firebasestorage.googleapis.com/v0/b/kirananearby-9eaa8.appspot.com/o/Barcode%20data%20upload%2FYippee_Magic_Masala_Noodles,_70_g.png?alt=media&token=d9e47bd7-f847-4d6f-9460-4be8dbcaae00",
   "barcode": "8901725181222",
   "isFmcg": true,
   "itemName": "Yippee Magic Masala Noodles, 70 G",
   "mrp": 12,
   "_created_at": "2016-10-02T13:49:03.284Z",
   "_updated_at": "2017-02-22T08:48:09.074Z"

我试过了:

import pandas as pd
data= pd.read_json('Data.json')

得到错误 ValueError: Expected object or value

还有

import json
with open('gdb.json') as datafile:
    data = json.load(datafile)
retail = pd.DataFrame(data)

错误:json.decoder.JSONDecodeError:额外数据:第 2 行第 1 列(字符 509)

with open('gdb.json') as datafile:
for line in datafile:
    data = json.loads(line)
retail = pd.DataFrame(data)

错误:json.decoder.JSONDecodeError:额外数据:第 1 行第 577 列(字符 576)

如何将这个json读入pandas

【问题讨论】:

你能解决吗? 暂时没有,我把它转成.csv文件了。 寻找这个-***.com/questions/27046593/… 以下任何答案都回答了您的问题吗?如果是,请选择最好的。 【参考方案1】:

我遇到了同样的错误,请阅读函数documentation 并尝试使用不同的参数。

我用下面的方法解决了,

data= pd.read_json('Data.json', lines=True)

你可以试试其他的,比如

data= pd.read_json('Data.json', lines=True, orient='records')

data= pd.read_json('Data.json', orient=str)

【讨论】:

我相信更新的链接是pandas.pydata.org/docs/reference/api/…【参考方案2】:

您的 JSON 格式错误。

ValueError: Expected object or value 可能会在您输入错误的文件名时出现。 Data.json 存在吗?我注意到您使用gdb.json 的其他尝试。

确认文件名正确后,您必须修复 JSON。您现在拥有的是两个由空格分隔的断开连接的记录。 JSON 中的列表必须是方括号内的有效数组,并用逗号分隔:[record1, record2, ...]

此外,对于 pandas,您应该将数组放在名为 "data" 的根元素下:

 "data": [ record1, record2, ... ] 

您的 JSON 最终应该如下所示:

"data":
    [
        "_id": "OzE5vaa3p7",
        "categories": [
            
                "__type": "Pointer",
                "className": "Category",
                "objectId": "nebCwWd2Fr"
            
        ],
        "isActive": true,
        "imageUrl": "https://firebasestorage.googleapis.com/v0/b/shopgro-1376.appspot.com/o/Barcode%20Data%20Upload%28II%29%2FAnil_puttu_flour_500g.png?alt=media&token=9cf63197-0925-4360-a31a-4675f4f46ae2",
        "barcode": "8908001921015",
        "isFmcg": true,
        "itemName": "Anil puttu flour 500g",
        "mrp": 58,
        "_created_at": "2016-10-02T13:49:03.281Z",
        "_updated_at": "2017-02-22T08:48:09.548Z"
    
    ,
    
        "_id": "ENPCL8ph1p",
        "categories": [
            
                "__type": "Pointer",
                "className": "Category",
                "objectId": "B4nZeUHmVK"
            
        ],
        "isActive": true,
        "imageUrl": "https://firebasestorage.googleapis.com/v0/b/kirananearby-9eaa8.appspot.com/o/Barcode%20data%20upload%2FYippee_Magic_Masala_Noodles,_70_g.png?alt=media&token=d9e47bd7-f847-4d6f-9460-4be8dbcaae00",
        "barcode": "8901725181222",
        "isFmcg": true,
        "itemName": "Yippee Magic Masala Noodles, 70 G",
        "mrp": 12,
        "_created_at": "2016-10-02T13:49:03.284Z",
        "_updated_at": "2017-02-22T08:48:09.074Z"
    ]

最后,pandas 调用这个格式split orientation,所以你要按如下方式加载:

df = pd.read_json('gdb.json', orient='split')

df 现在包含以下数据框:

          _id                                                   categories  isActive                                                     imageUrl        barcode  isFmcg                           itemName  mrp                      _created_at                      _updated_at
0  OzE5vaa3p7  ['__type': 'Pointer', 'className': 'Category', 'objectI...      True  https://firebasestorage.googleapis.com/v0/b/shopgro-1376...  8908001921015    True              Anil puttu flour 500g   58 2016-10-02 13:49:03.281000+00:00 2017-02-22 08:48:09.548000+00:00
1  ENPCL8ph1p  ['__type': 'Pointer', 'className': 'Category', 'objectI...      True  https://firebasestorage.googleapis.com/v0/b/kirananearby...  8901725181222    True  Yippee Magic Masala Noodles, 70 G   12 2016-10-02 13:49:03.284000+00:00 2017-02-22 08:48:09.074000+00:00

【讨论】:

【参考方案3】:

您应该确保终端目录与文件目录相同(当我发生此错误时,因为我使用了vscode,对我来说意味着vscode中的终端目录与我的python文件不一样我想执行)

【讨论】:

【参考方案4】:

我认为这不是问题,因为它应该是默认设置(我认为)。但是你试过这个吗?添加“r”来指定文件是只读的。

import json with open('gdb.json', 'r') as datafile: data = json.load(datafile) retail = pd.DataFrame(data)

【讨论】:

【参考方案5】:

让你的路径变得简单,这将有助于读取数据。 同时,只需将您的文件放在桌面上并提供读取数据的路径。它有效。

【讨论】:

是的,很奇怪。即使是拼写错误的文件名也会导致 pd.read_json 出现此错误。它没有告诉你文件未找到,而是给出“ValueError:预期的对象或值”【参考方案6】:

您可以尝试将相对路径更改为绝对路径 针对你的情况 改变

import pandas as pd
data= pd.read_json('Data.json')

import pandas as pd
data= pd.read_json('C://Data.json')#the absolute path in explore

当我在控制台中将相同的代码从 jupyter notebook 运行到 pycharm 的 jupyter notebook 时,我遇到了同样的错误

【讨论】:

【参考方案7】:

如果您尝试下面的代码,它将解决问题:

data_set = pd.read_json(r'json_file_address\file_name.json', lines=True)

【讨论】:

【参考方案8】:

我遇到了同样的问题,这背后的原因是 json 文件有一些不遵守 json 规则的东西。就我而言,我在其中一个值中使用了单引号而不是双引号。

【讨论】:

您遇到的错误与原问题中的错误无关。【参考方案9】:

我不确定我是否清楚地理解了你的问题,你只是想读取 json 数据?

我刚刚将您的样本数据收集到如下所示的列表中

[
  
   "_id": "OzE5vaa3p7",
   "categories": [
      
         "__type": "Pointer",
         "className": "Category",
         "objectId": "nebCwWd2Fr"
      
   ],
   "isActive": true,
   "imageUrl": "https://firebasestorage.googleapis.com/v0/b/shopgro-1376.appspot.com/o/Barcode%20Data%20Upload%28II%29%2FAnil_puttu_flour_500g.png?alt=media&token=9cf63197-0925-4360-a31a-4675f4f46ae2",
   "barcode": "8908001921015",
   "isFmcg": true,
   "itemName": "Anil puttu flour 500g",
   "mrp": 58,
   "_created_at": "2016-10-02T13:49:03.281Z",
   "_updated_at": "2017-02-22T08:48:09.548Z"
,

   "_id": "ENPCL8ph1p",
   "categories": [
      
         "__type": "Pointer",
         "className": "Category",
         "objectId": "B4nZeUHmVK"
      
   ],
   "isActive": true,
   "imageUrl": "https://firebasestorage.googleapis.com/v0/b/kirananearby-9eaa8.appspot.com/o/Barcode%20data%20upload%2FYippee_Magic_Masala_Noodles,_70_g.png?alt=media&token=d9e47bd7-f847-4d6f-9460-4be8dbcaae00",
   "barcode": "8901725181222",
   "isFmcg": true,
   "itemName": "Yippee Magic Masala Noodles, 70 G",
   "mrp": 12,
   "_created_at": "2016-10-02T13:49:03.284Z",
   "_updated_at": "2017-02-22T08:48:09.074Z"

]

并运行此代码

import pandas as pd
df = pd.read_json('Data.json')
print(df)

输出:-

              _created_at ... mrp
0 2016-10-02 13:49:03.281 ...  58
1 2016-10-02 13:49:03.284 ...  12

[2 rows x 10 columns]

【讨论】:

【参考方案10】:

我今天遇到了这个错误消息,就我而言,问题是文本文件的编码是 UTF-8-BOM 而不是 UTF-8,这是 read_json() 的默认值。 这可以通过指定编码来解决:

data= pd.read_json('Data.json', encoding = 'utf-8-sig')

【讨论】:

以上是关于ValueError:将json读取为熊猫数据框时的预期对象或值的主要内容,如果未能解决你的问题,请参考以下文章

将json文件读取为熊猫数据框?

ValueError 将多索引熊猫数据框转换为 Excel

将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确

如何摆脱熊猫将excel表中的大数转换为指数?

从 Google BigQuery 创建熊猫数据框时如何执行 na_values

使用熊猫数据框时出错