将嵌套键/值和嵌套列表合并到json中

2024-05-08 19:48:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将字典键/值的嵌套列表合并到单个键和值列表中。我正在将csv文件加载到数据帧中,并从中尝试将其转换为嵌套的json。请看下面我已经试过了。我应该走这条路线来创建json还是pandas有一个本机功能来进行这种类型的转换?你知道吗

样本数据:

Subject,StudentName,Category
ENGLISH,Jane,
ENGLISH,,A
MATH,Matt,B
MATH,Newman,AA
MATH,,B
MATH,Dylan,A
ENGLISH,Noah,
ENGLISH,,C

试过这个:

df1 = pd.read_csv('../data/file.csv')
json_doc = defaultdict(list)
for _id in df1.T:
    data = df1.T[_id]
    key = data.Subject
    values = {'StudentName': data.StudentName,'Category':data.Category}
    json_doc[key].append(values)

new_d = json.dumps(json_doc, indent=4)

{k: int(v) for k, v in new_d} # error: ValueError: not enough values to unpack (expected 2, got 1)

我从上面的代码中得到:

{
    "ENGLISH": [
        {
            "StudentName": "Jane",
            "Category": NaN
        },
        {
            "StudentName": NaN,
            "Category": "A"
        },
        {
            "StudentName": "Noah",
            "Category": NaN
        },
        {
            "StudentName": NaN,
            "Category": "C"
        }
    ],
    "MATH": [
        {
            "StudentName": "Matt",
            "Category": "B"
        },
        {
            "StudentName": "Newman",
            "Category": "AA"
        },
        {
            "StudentName": NaN,
            "Category": "B"
        },
        {
            "StudentName": "Dylan",
            "Category": "A"
        }
    ]
}

如何合并键/值以使其看起来像这样?你知道吗

{
    "ENGLISH": [
        {
            "StudentName": ["Jane","Noah"],
            "Category": ["A","C"]
        }
    ],
    "MATH": [
        {
            "StudentName": ["Matt","Newman","Dylan"]
            "Category": ["B","AA","A"]
        }
    ]
}

Tags: csvjsondataenglishmathmattnanaa
1条回答
网友
1楼 · 发布于 2024-05-08 19:48:26

我并不完全清楚是否可以安全地忽略缺失的值,但下面是我的一句话:

df.groupby('Subject').agg(lambda g: list(g.dropna())).to_dict(orient='index')

默认方法(to_jsonto_dict)没有合适的orient选项。因此,我们必须手工完成一些工作,通过索引分组,然后将列数据转换为列表。然后,.to_dict(orient='index')将执行您想要的操作(如果您想要字符串而不是对象,则替换为to_json)。你知道吗

注意:Subject这里应该是一个列,而不是索引。你知道吗

相关问题 更多 >