使用第一列作为键,第二列作为值的 DataFrame 到 Json

Posted

技术标签:

【中文标题】使用第一列作为键,第二列作为值的 DataFrame 到 Json【英文标题】:DataFrame to Json Using First Col as Key and Second as Value 【发布时间】:2018-11-20 12:13:41 【问题描述】:

我有一个如下所示的数据框:

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

我想插入一个如下所示的 mongoDB:

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

我该怎么做?

我已经检查过这样的事情,但它们似乎不适用于我的 df:

convert pandas dataframe to json object - pandas

提前致谢!

【问题讨论】:

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

使用Series.to_json 并在必要时更改key 值添加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')

【讨论】:

感谢耶斯瑞尔!你不是第一次帮我了!!这个解决方案怎么样? dic = 1:'a', 2:'b',3:'c',4:'d' 试试print (k.set_index('A')['B'].to_json()) 这看起来很棒的伙伴,我要测试我的非假人 df 来验证! 因为是json,如果需要dict,就用print (k.set_index('A')['B'].to_dict())【参考方案2】:

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

问题:如何从 panda 数据框中创建一个字典,其中一列作为键,常量值(在我的例子中为 1)作为你猜对的值。

解决方案:

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)

附: Python新手,请对我温柔:)​​。

【讨论】:

以上是关于使用第一列作为键,第二列作为值的 DataFrame 到 Json的主要内容,如果未能解决你的问题,请参考以下文章

怎样在一条sql语句中将第一列和第二列加和的值作为第三列的值

UCanAccess 读取表的最后一列作为第一列[重复]

如何检查sql的第一列或第二列中是不是存在一个特定值?

第三列单元格应该是excel第一列和第二列中两个数字的乘积

作为网格编辑器的容器控件不会更新值

EXCEL如何把第二列的数据按照第一列数据排序,且第二列的数据少于第一列?