熊猫-将CSV转换为JSON-使用groupby进行整理,然后删除索引键

时间:2019-04-03 23:04:47

标签: python json pandas csv

我有一个CSV文件,我正在尝试使用Pandas将其转换为JSON。它具有多个标题,但为简单起见,我们只说它具有3:“区域”,“州”和“销售人员”。三列三行,其中经常有重复值(状态名称等)。

我理想的结果是:

{
    "salesperson": [
        {
            "name": "John Doe",
            "values": [
                {
                    "region": "North America",
                    "state": "Connecticut"
                },
                {
                    "region": "North America",
                    "state": "Vermont"
                }
            ]
        },
        {
            "name": "Jane Doe",
            "values": [
                {
                    "region": "North America",
                    "state": "New York"
                },
                {
                    "region": "North America",
                    "state": "New Hampshire"
                }
            ]
        }
    ]
}

这是我目前拥有的用于读取数据并将其转换为JSON的功能。

df = pd.read_csv('Foo.csv', encoding="ISO-8859-1",
                    escapechar='\\')
result = (df.groupby(['salesperson'])
            .apply(lambda x: x.to_dict('r'))
            .to_json(orient='table')
            )
return result

.to_json(orient='table')很近,它给了我

"data": [
    {
        "salesperson": "John Doe",
        "values": [
            {
                "region": "North America",
                "state": "Connecticut",
                "salesperson": "John Doe"
            },

但是,“销售人员”仍在“值”中。我已经尝试过

result = (df.groupby(['salesperson'])
            .apply(lambda x: x.to_dict('r'))
            .drop('salesperson')
            .to_json(orient='table')
            )

但这似乎不是正确的方法。

我不确定如何告诉它使用“销售人员”作为索引并将其从输出中删除,而无需在创建JSON文件后对其进行实际编辑。

2 个答案:

答案 0 :(得分:0)

下面的代码删除不需要的密钥。

步骤1:

分配一个变量。

data = {
        "salesperson": "John Doe",
        "values": [
            {
                "region": "North America",
                "state": "Connecticut",
                "salesperson": "John Doe"
            }]
       }

第2步: 删除键

del data['salesperson']

输出:

enter image description here

答案 1 :(得分:0)

在应用drop之前,我必须对密钥应用to_dict()

result = df.groupby(df.salesperson).apply(
    lambda x: x.drop('salesperson', 1).to_dict('records')).to_json(orient='index')

这会将键从结果JSON值中删除,同时将其保留为索引。