【问题标题】:Pandas - Converting CSV to JSON - organize with groupby and then remove index keyPandas - 将 CSV 转换为 JSON - 使用 groupby 进行组织,然后删除索引键
【发布时间】:2019-04-03 23:04:47
【问题描述】:

我有一个 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')
            )

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

我不确定如何告诉它使用“salesperson”作为索引并将其从输出中删除,而不是在创建 JSON 文件后实际编辑它。

【问题讨论】:

  • 能否分享您的 csv 文件样本
  • 你试过 index=False 吗?

标签: python json pandas csv


【解决方案1】:

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

第 1 步:

分配一个变量。

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

第 2 步: 删除键

del data['salesperson']

输出:

【讨论】:

    【解决方案2】:

    在应用 to_dict() 之前,我必须将 drop 应用到密钥上

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2022-01-26
      • 2021-12-26
      • 2017-07-14
      • 2021-12-28
      • 2018-11-06
      • 2022-01-26
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多