Python 熊猫阅读“带orient=”的json;表「;

Python 熊猫阅读“带orient=”的json;表「;,python,json,pandas,Python,Json,Pandas,我已经基于扩展json编码器转储了大量数据帧。我只是改变了转储数据帧的方式,将orient=“records”更改为orient=“table”,以供自己使用 不知何故,我无法从json读取数据帧;准确地说,熊猫似乎读得很好(没有提出例外),但它充满了NaN值 有人能检查我是否做错了什么,或者这是否是熊猫的bug(可能指的是多索引数据帧) 我使用的是熊猫1.1.4版 下面的代码(我希望)足以测试pandas是否在我的机器上运行,或者我是否弄乱了数据帧的格式。我还试图用一个包含两个索引的虚拟数据帧

我已经基于扩展json编码器转储了大量数据帧。我只是改变了转储数据帧的方式,将orient=“records”更改为orient=“table”,以供自己使用

不知何故,我无法从json读取数据帧;准确地说,熊猫似乎读得很好(没有提出例外),但它充满了NaN值

有人能检查我是否做错了什么,或者这是否是熊猫的bug(可能指的是多索引数据帧)

我使用的是熊猫1.1.4版

下面的代码(我希望)足以测试pandas是否在我的机器上运行,或者我是否弄乱了数据帧的格式。我还试图用一个包含两个索引的虚拟数据帧来重现这一点,但没有遇到麻烦

还请注意,json显示了一个“pandas_version”:“0.20.0”,这与我的版本不一致(我刚刚进行了一次新的安装,以确保它保持不变)。我已经看到相同的0.20.0版本显示在当前熊猫版本的示例中

import pandas as pd
s = """{
    "schema": {
        "fields": [{
                "name": "grandeur",
                "type": "string"
            }, {
                "name": "unite",
                "type": "string"
            }, {
                "name": "year",
                "type": "integer"
            }, {
                "name": 1,
                "type": "number"
            }, {
                "name": 2,
                "type": "number"
            }, {
                "name": 3,
                "type": "number"
            }, {
                "name": 4,
                "type": "number"
            }, {
                "name": 5,
                "type": "number"
            }, {
                "name": 6,
                "type": "number"
            }, {
                "name": 7,
                "type": "number"
            }, {
                "name": 8,
                "type": "number"
            }, {
                "name": 9,
                "type": "number"
            }, {
                "name": 10,
                "type": "number"
            }, {
                "name": 11,
                "type": "number"
            }, {
                "name": 12,
                "type": "number"
            }
        ],
        "primaryKey": ["grandeur", "unite", "year"],
        "pandas_version": "0.20.0"
    },
    "data": [{
            "grandeur": "Volumetric soil water layer 1",
            "unite": "m3 m-3",
            "year": 1981,
            "1": 0.3893150916,
            "2": 0.3614713229,
            "3": 0.3965121538,
            "4": 0.3513062306,
            "5": 0.3860211495,
            "6": 0.3507631742,
            "7": 0.3499931922,
            "8": 0.3195245205,
            "9": 0.3078848032,
            "10": 0.3917079828,
            "11": 0.380486904,
            "12": 0.3987094194
        }, {
            "grandeur": "Volumetric soil water layer 1",
            "unite": "m3 m-3",
            "year": 1982,
            "1": 0.3924450997,
            "2": 0.360954089,
            "3": 0.3714920435,
            "4": 0.3366828332,
            "5": 0.329994006,
            "6": 0.3659116305,
            "7": 0.3035419171,
            "8": 0.3143600073,
            "9": 0.3099404359,
            "10": 0.3938543858,
            "11": 0.383870834,
            "12": 0.3909665621
        }]
}"""
pd.read_json(s, orient="table")

这是因为架构中的字段与数据中的键不匹配

比如说,

模式

{
    "name": 1,   // integer
    "type": "number"
}
{
    "name": "1",   // string
    "type": "number"
}
资料

====================================================

如果将架构更改为与数据键匹配
read_json
应正确读取

模式

{
    "name": 1,   // integer
    "type": "number"
}
{
    "name": "1",   // string
    "type": "number"
}
资料


如果示例json字符串是由pandas
to_json
生成的,那么它为整数列名生成了错误的模式。

可能与所有这些空格和\n中的空格有关?它们是在你扔掉字典的时候创造出来的还是你把它们加在一起用的?@IoaTzimas我不这么认为。我只是对它进行了解析,使它更容易阅读,所以也更小(有更多的行比这个)。起初它是一个包含所有引号转义符的单行程序。这是因为模式中的
“name”:1
是整数,数据的键有字符串“1”。您可以通过更改为
“name”进行测试:“1”
在架构中显示,以查看1中的值。@Emma我不太确定这一点。“1”是该栏的标签(实际代表一月);您可以看到json的“数据”部分中的值,这些值肯定是浮点值……对了,我所说的问题是模式而不是数据部分。这可能是整数列名在
存储模式和数据信息到_json
时所面临的问题。然而,我刚刚修改了模式中的
{“name”:“1”,“type”:“number”}
,第1列中的值出现了。事实上,模式是正确的,这就是错误的数据并显示(应该是整数)字符串。我提交了一个问题。(作为补充:这些列的整数标签可能看起来很尴尬,但这些是“melt”方法的结果,所以这里没有什么不寻常的…)我刚刚阅读了问题线程。JSON不允许整数键,因此对于这种格式,我同意不允许整数列名或将列名转换为字符串是有意义的。我个人倾向于使用警告选项,将整数转换为字符串(但这不取决于我)。我有点不明白为什么我的第一个示例(这里是SO)返回了一个空数据帧,尽管我在Github上放的最小示例引发了一个异常。。。