【问题标题】:Convert CSV to Nested JSON complex structure using Pandas使用 Pandas 将 CSV 转换为嵌套的 JSON 复杂结构
【发布时间】:2019-12-20 15:17:09
【问题描述】:

使用 Pandas 转换为嵌套的 JSON 文件

这是一行的示例 csv

name      type  aitm      alitm     aaitm           adsc1   
specs     glass 70072187  ESA65Z45  ESA 65Z45       CUT TIP FG 1808-40  

我正在尝试为每一行实现嵌套 JSON 的以下结构

【问题讨论】:

  • 熊猫和这个有什么关系?
  • Pandas 是 python 包之一,它使导入和分析数据变得更加容易。
  • 我认为评论的真正意思是这个问题并不是真正与熊猫相关的问题。除了在 csv 中进行简单读取之外,不使用 pandas。

标签: python json pandas nested jupyter-notebook


【解决方案1】:
import pandas as pd
import json

df = pd.DataFrame([['specs','glass','70072187','ESA65Z45','ESA 65Z45','CUT TIP FG 1808-40'],
                   ['specs','glass','666','ESA6665','ESB 666','CUT TIP FG 66-40']],
                       columns = ['name', 'type','aitm','alitm','aaitm','adsc1' ])


data = {'entities':[]}
for key,grp in df.groupby('name'):
    for idx, row in grp.iterrows():
        temp_dict_alpha = {'name':key, 'type':row['type'], 'data':{'attributes':{}}}

        attr_row = row[~row.index.isin(['name','type'])]
        for idx2, row2 in attr_row.iteritems():
            dict_temp = {}
            dict_temp[idx2] = {'values':[]}
            dict_temp[idx2]['values'].append({'value':row2,'source':'internal','locale':'en_US'})

            temp_dict_alpha['data']['attributes'].update(dict_temp)

        data['entities'].append(temp_dict_alpha)


print(json.dumps(data, indent= 4))   

输出:

print(json.dumps(data, indent= 4))
{
    "entities": [
        {
            "name": "specs",
            "type": "glass",
            "data": {
                "attributes": {
                    "aitm": {
                        "values": [
                            {
                                "value": "70072187",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "alitm": {
                        "values": [
                            {
                                "value": "ESA65Z45",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "aaitm": {
                        "values": [
                            {
                                "value": "ESA 65Z45",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "adsc1": {
                        "values": [
                            {
                                "value": "CUT TIP FG 1808-40",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    }
                }
            }
        },
        {
            "name": "specs",
            "type": "glass",
            "data": {
                "attributes": {
                    "aitm": {
                        "values": [
                            {
                                "value": "666",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "alitm": {
                        "values": [
                            {
                                "value": "ESA6665",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "aaitm": {
                        "values": [
                            {
                                "value": "ESB 666",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    },
                    "adsc1": {
                        "values": [
                            {
                                "value": "CUT TIP FG 66-40",
                                "source": "internal",
                                "locale": "en_US"
                            }
                        ]
                    }
                }
            }
        }
    ]
}

【讨论】:

  • 我明天早上去看看,然后回复你。
  • 我不确定我是否理解。您想要为aitm 的每个唯一值创建一个单独的 json 文件吗?我想那我的问题是你为什么不按那个而不是按“名字”分组?或者为什么这个价值远远低于你的水平?我不得不说,这种 json 格式也是低效的(就像注释一样),因为有很多重复,并且还有 1 个值/字典的列表也是不必要的(除非这比您提供的数据更多一个例子。)
  • 你可以轻松完成。您只需遍历每一行。我会尽快发布解决方案
  • @satyaveni,应该是一个简单的解决方案。现在不能,但我很快就能解决这个问题。
  • @satyaveni,好的,我将解决方案放在您提供的问题/链接中
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 2021-08-26
  • 1970-01-01
  • 2017-06-10
  • 2022-11-22
  • 2019-11-14
  • 2021-08-26
  • 1970-01-01
相关资源
最近更新 更多