【问题标题】:I am trying to pivot a json file using pandas to be in a specific format. I want to pivot it on certain columns我正在尝试使用 pandas 将 json 文件转换为特定格式。我想在某些列上旋转它
【发布时间】:2021-12-03 23:55:33
【问题描述】:

所以我尝试在网上搜索以找到一种可以转换以下json的方法。

{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Forecast%": "67",
"Sponsor": "Jon R",
"IsActive": "1",
"InternalOrder": "null",
"Forecast": "null",
"BidStatus": "null",
"ProjectNotes": "null",
"EstimateTypeCode": "null",
"Start": "null",
"SponsoringDistrict": "null",
"LocationState": "null",
"Finish": "null",
"AreaManager": "null",
"CTG Vendor": "null"
}

到下面的那个。

{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"Forecast%",
"AttrValue":"67",
},
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"Sponsor",
"AttrValue":"Jon R",
},
{
"eTask_ID": "100",
"Organization": "Power",
"BidID": "2.00",
"Project": "IPP - C",
"Attribute":"IsActive",
"AttrValue":"1",
},
...

现在,如果您看到除前四个之外的所有属性都被转换为 Attribute 和 AttributeValue 并获得它们自己的记录。

我已尝试在网络上搜索解决方案,但仍在尝试寻找解决方案。

如果有人可以请帮忙。

提前谢谢你。

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案1】:

    使用pd.melt:

    import json
    
    with open('data.json') as json_data:
        data = json.load(json_data)
        
        out = pd.DataFrame.from_dict(data, orient='index').T \
                .melt(['eTask_ID', 'Organization', 'BidID', 'Project'], 
                      var_name='Attribute', value_name='AttrValue') \
                .to_json(orient='records', indent=4)
    

    输出:

    >>> print(out)
    [
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"Forecast%",
            "AttrValue":67
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"Sponsor",
            "AttrValue":"Jon R"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"IsActive",
            "AttrValue":1
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"InternalOrder",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"Forecast",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"BidStatus",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"ProjectNotes",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"EstimateTypeCode",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"Start",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"SponsoringDistrict",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"LocationState",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"Finish",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"AreaManager",
            "AttrValue":"null"
        },
        {
            "eTask_ID":100,
            "Organization":"Power",
            "BidID":2,
            "Project":"IPP - C",
            "Attribute":"CTG Vendor",
            "AttrValue":"null"
        }
    ]
    

    【讨论】:

    • 非常感谢 Corralien,它工作得非常好。
    猜你喜欢
    • 2018-05-19
    • 2020-05-13
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多