使用第一列作为键,第二列作为值将DataFrame转换为Json

8

我有一个数据框,长这样:

k = pd.DataFrame({'A':[1,2,3,4], 'B':['a','b','c','d']})

我想要插入一个类似这样的 mongoDB:

dic = {1:'a', 2:'b',3:'c',4:'d'}

我该怎么做呢?

我已经检查了一些类似的东西,但它们似乎在我的df上不起作用:

将Pandas数据框转换为JSON对象 - Pandas

提前致谢!


1
我强烈建议您不要以那种方式插入MongoDB。虽然您可以存储“灵活”的数据结构,但是“垃圾进去,垃圾出来”。任何作为数据库中“键”名称的“数据点”都不应该被使用。如果您想在导入后进行有意义的查询,您真的应该重新考虑如何存储它。 - Neil Lunn
所以你建议不指定索引,让mongo自己创建一个?那是个好建议,我也想过这个问题,但我需要它拥有以下结构:json = {key:{key:value, key:value}} 也许我可以找到更好的方法,但怎么做呢?是的,这种类型也可能行得通,对吧?字典 = :{1:'a', 2:'b',3:'c',4:'d'} - Borja_042
我想说的是{ key1: value1, key2: value2 }就是你需要避免的问题。你不能以高效的方式“查询数据库”来匹配key1key2。另一方面,[{ k: "key1", v: "value1" },{ k: "key2", v: "value2" }]完全可以工作,因为每个元素中的kv是静态的。 - Neil Lunn
2个回答

7

使用 Series.to_json 方法,如果需要更改键值,请添加 rename 参数:

print (k.set_index('A').rename(columns={'B':'index1'}).to_json())
{"index1":{"1":"a","2":"b","3":"c","4":"d"}}

如果需要导出文件:

k.set_index('A').rename(columns={'B':'index1'}).to_json('file.json')

感谢Jezrael!这不是你第一次帮助我了!这个解决方案怎么样?dic = {1:'a',2:'b',3:'c',4:'d'} - Borja_042
2
尝试使用 print(k.set_index('A')['B'].to_json()) - jezrael
1
看起来不错,伙计。我会在我的非虚拟数据框上进行测试以验证! - Borja_042
1
因为它是 json 格式,如果需要字典,请使用 print(k.set_index('A')['B'].to_dict()) - jezrael

0

虽然我写的内容并不是回答所提出问题的答案,但我仍然提供了解决我遇到的一个小问题的方案,这个问题我在谷歌上搜索并找到了这里。

问题:如何从带有列作为键和常量值(在我的情况下为1)作为值的panda数据框架创建字典。

解决方案:

f = pd.Series(data = [1]*df.shape[0],index=df['col_name'])
x = f.to_json(orient='columns')

输出:

{"one":1, "two":1, "three": 1}

为什么我要这样做呢? 因为字典搜索已经高度优化了(是的,我也可以使用set)

P.S. 我是Python的新手,请对我温柔点 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接