Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重塑嵌套JSON输出的数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何重塑嵌套JSON输出的数据帧

Python 如何重塑嵌套JSON输出的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我开始处理一些数据操作,我需要在旧文件的基础上创建一个新文件(具有新功能)。然而,在使用“.to_json”方法之前,我不知道如何定制自己的数据帧 例如,我将.csv作为: seller, customer, product, price Roger, Will, 8129, 30 Roger, Markus, 1234, 100 Roger, Will, 2334, 50 Mike, Markus, 2295, 20 Mike, Albert, 1234, 100 …我想生成一个.json文

我开始处理一些数据操作,我需要在旧文件的基础上创建一个新文件(具有新功能)。然而,在使用“.to_json”方法之前,我不知道如何定制自己的数据帧

例如,我将.csv作为:

seller, customer, product, price
Roger, Will, 8129, 30
Roger, Markus, 1234, 100
Roger, Will, 2334, 50
Mike, Markus, 2295, 20
Mike, Albert, 1234, 100
…我想生成一个.json文件,以支持我从中可视化网络。这应该大致类似于:

{
"node": [
      {"id":"Roger", "group": "seller" },
      {"id":"Mike", "group": "seller" },
      {"id":"Will", "group": "customer" },
      {"id":"Markus", "group": "customer" },
      {"id":"Albert", "group": "customer" }
],
"links":[
      {"source":"Roger","target":"Will","product":8129,"price":30},
      #...and so on
]
}
我试着做一些类似的事情:

df1 = pd.read_csv('file.csv')
seller_list = df1.seller.unique()
customer_list = df1.customer.unique()
…而且我确实可以得到带有独特项目的列表。但是,我找不到如何将它们添加到数据帧中,以便创建如下结构:

"node":[
      ...
      {"id":"Mike", "group": "seller" },
      {"id":"Markus", "group": "customer" },
      ...
]...#see above

对此的任何支持或提示都将不胜感激。

这将是一个两步流程。首先,使用
melt
+
drop\u duplicates
+
创建
节点
dict
-

nodes = df[['customer', 'seller']]\
           .melt(var_name='group', value_name='id')\
           .drop_duplicates()\
           .to_dict('r')
现在,使用
重命名
+

links = df.rename(columns={'seller' : 'source', 'customer' : 'target'}).to_dict('r')
现在,将数据合并到一个字典中,并将其作为JSON转储到一个文件中

data = {'nodes' : nodes, 'links' : links}

with open('data.json', 'w') as f:
    json.dump(data, f, indent=4)
您的
data.json
文件应该如下所示-

{
    "nodes": [
        {
            "id": "Will",
            "group": "customer"
        },
        {
            "id": "Markus",
            "group": "customer"
        },
        {
            "id": "Albert",
            "group": "customer"
        },
        {
            "id": "Roger",
            "group": "seller"
        },
        {
            "id": "Mike",
            "group": "seller"
        }
    ],
    "links": [
        {
            "product": 8129,
            "target": "Will",
            "source": "Roger",
            "price": 30
        },
        {
            "product": 1234,
            "target": "Markus",
            "source": "Roger",
            "price": 100
        },
        {
            "product": 2334,
            "target": "Will",
            "source": "Roger",
            "price": 50
        },
        {
            "product": 2295,
            "target": "Markus",
            "source": "Mike",
            "price": 20
        },
        {
            "product": 1234,
            "target": "Albert",
            "source": "Mike",
            "price": 100
        }
    ]
}

这将是一个分两步的过程。首先,使用
melt
+
drop\u duplicates
+
创建
节点
dict
-

nodes = df[['customer', 'seller']]\
           .melt(var_name='group', value_name='id')\
           .drop_duplicates()\
           .to_dict('r')
现在,使用
重命名
+

links = df.rename(columns={'seller' : 'source', 'customer' : 'target'}).to_dict('r')
现在,将数据合并到一个字典中,并将其作为JSON转储到一个文件中

data = {'nodes' : nodes, 'links' : links}

with open('data.json', 'w') as f:
    json.dump(data, f, indent=4)
您的
data.json
文件应该如下所示-

{
    "nodes": [
        {
            "id": "Will",
            "group": "customer"
        },
        {
            "id": "Markus",
            "group": "customer"
        },
        {
            "id": "Albert",
            "group": "customer"
        },
        {
            "id": "Roger",
            "group": "seller"
        },
        {
            "id": "Mike",
            "group": "seller"
        }
    ],
    "links": [
        {
            "product": 8129,
            "target": "Will",
            "source": "Roger",
            "price": 30
        },
        {
            "product": 1234,
            "target": "Markus",
            "source": "Roger",
            "price": 100
        },
        {
            "product": 2334,
            "target": "Will",
            "source": "Roger",
            "price": 50
        },
        {
            "product": 2295,
            "target": "Markus",
            "source": "Mike",
            "price": 20
        },
        {
            "product": 1234,
            "target": "Albert",
            "source": "Mike",
            "price": 100
        }
    ]
}

你好,COLDSPEED,你的答案看起来很棒!谢谢!!如果可能的话,我想再问你一个小问题。如果我想从“链接”的一半中排除一个维度,该怎么办。例如,排除“产品”,只留下“目标”、“来源”和“价格”。我可以用什么方法来降低这个维度?@Rogerameidalete在计算链接之前,做:df=df.drop(“产品”,1)你好,COLDSPEED,你的答案看起来很棒!谢谢!!如果可能的话,我想再问你一个小问题。如果我想从“链接”的一半中排除一个维度,该怎么办。例如,排除“产品”,只留下“目标”、“来源”和“价格”。我可以使用什么方法来降低这个维度?@rogerameidalete在计算链接之前,do:df=df.drop(“产品”,1)