【问题标题】:How to turn a dataframe of categorical data into a dictionary如何将分类数据的数据框转换为字典
【发布时间】:2013-06-10 23:08:12
【问题描述】:

我有一个需要转换为 JSON 的数据框。我认为首先将它变成字典会更容易,但我不知道如何。我需要将其转换为 JSON,以便我可以使用 js.d3 对其进行可视化

这是当前数据的样子:

NAME, CATEGORY, TAG
Ex1, Education, Books
Ex2, Transportation, Bus
Ex3, Education, Schools
Ex4, Education, Books
Ex5, Markets, Stores

这是我希望数据的样子:

Data = {
     Education {
        Books {
           key: Ex1,
           key: Ex2 
}
Schools {
key: Ex3
}
}
Transportation {
Bus {
key: Ex2
}
}
Markets {
Stores {
key: Ex5
}
}

(我认为我的 JSON 在这里并不完美,但我只是想传达总体思路)。

【问题讨论】:

  • 数据当前是否在文本文件中?您的格式看起来像 CSV,但不想假设任何内容。
  • 我看到了 Python 标签.... 你是说 pandas DataFrame 吗?如果是这样,请参阅this branch
  • 数据当前在 CSV 文件中。
  • 是的,我将它作为 pandas DataFrame 导入,我会查看链接,谢谢!

标签: python json dataframe transformation


【解决方案1】:

此代码感谢 Brent Washburne 的上述非常有用的回答。我只需要删除标签列,因为现在它太乱了(许多行有多个用逗号分隔的标签)。我还添加了一个我想要连接到名称的(整数)列。这里是:

import json, string
import pprint

def to_json(file):
data = {}
for line in open(file):
    fields = map(string.strip, line.split(','))
    categories = data.get(fields[1], [])
    to_append = {}       
    to_append[fields[0]] = fields[3]
    categories.append(to_append)
    data[fields[1]] = categories
return json.dumps(data)

print to_json('data.csv')

【讨论】:

    【解决方案2】:

    你不能多次使用'key'作为键,所以最里面的组是一个列表:

    import json, string
    
    def to_json(file):
        data = {}
        for line in open(file):
            fields = map(string.strip, line.split(','))
            categories = data.get(fields[1], {})
            tags = categories.get(fields[2], [])
            tags.append(fields[0])
            categories[fields[2]] = tags
            data[fields[1]] = categories
        return json.dumps(data)
    
    print to_json('data.csv')
    

    结果:

    {"Markets": {"Stores": ["Ex5"]}, "Education": {"Schools": ["Ex3"], "Books": ["Ex1", "Ex4"]}, "Transportation": {"Bus": ["Ex2"]}}
    

    【讨论】:

    • 这非常有帮助。谢谢!!我需要对数据进行一些更改,因此我稍微更改了代码并将其发布为答案,以防其他人遇到类似问题。
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2021-02-03
    • 2020-07-06
    • 1970-01-01
    • 2022-07-05
    • 2021-06-19
    • 2019-08-02
    相关资源
    最近更新 更多