使用Pandas将csv数据分组到json中

时间:2017-09-27 23:49:01

标签: python json pandas csv

我之前从未使用过Pandas,而且我正在尝试从csv数据到json进行非常简单的转换。

我的csv数据格式如下:

Category | Type | Parameter Name | Parameter Value
---------|------|----------------|----------------
Windows  | W1   | Width          | 900
Windows  | W1   | Height         | 900
Windows  | W2   | Width          | 1200
Windows  | W2   | Height         | 500
Doors    | D1   | Width          | 900
Doors    | D1   | Height         | 2100
Doors    | D2   | Width          | 820
Doors    | D2   | Height         | 2100

我想制作类似的东西:

{
    "Windows": {
        "W1": {
            "Height": 900, 
            "Width": 900
         }, 
         "W2": {
             "Height": 500, 
             "Width": 1200
         },
     },
     "Doors: {
        "D1": {
            "Height": 2100, 
            "Width": 900
         }, 
         "D2": {
             "Height": 2100, 
             "Width": 500
         }, 
     }, 
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

没有时间做更多事情。希望这有帮助

s = df.set_index(df.columns[:-1].tolist())[df.columns[-1]]

def redict(s):
    if s.index.nlevels == 1:
        return s.to_dict()
    else:
        return {k: redict(g.xs(k)) for k, g in s.groupby(level=0)}

redict(s)

{'Doors': {'D1': {'Height': 2100, 'Width': 900},
  'D2': {'Height': 2100, 'Width': 820}},
 'Windows': {'W1': {'Height': 900, 'Width': 900},
  'W2': {'Height': 500, 'Width': 1200}}}

稍作修改后,我们会获得json

s = df.set_index(df.columns[:-1].tolist())[df.columns[-1]]

def redict(s):
    if s.index.nlevels == 1:
        return s.astype(str).to_dict()
    else:
        return {k: redict(g.xs(k)) for k, g in s.groupby(level=0)}

json.dumps(redict(s))

'{"Doors": {"D1": {"Width": "900", "Height": "2100"}, "D2": {"Width": "820", "Height": "2100"}}, "Windows": {"W1": {"Width": "900", "Height": "900"}, "W2": {"Width": "1200", "Height": "500"}}}'