将 pandas 数据帧转换为 json 对象 - pandas

Posted

技术标签:

【中文标题】将 pandas 数据帧转换为 json 对象 - pandas【英文标题】:convert pandas dataframe to json object - pandas 【发布时间】:2018-10-27 08:01:51 【问题描述】:

我正在使用df.to_json() 将数据帧转换为 json。但它给了我一个 json 字符串而不是一个对象。如何获取 json 对象。

另外,当我将此数据附加到数组时,它会在 json 前后添加单引号,这会破坏 json 结构。如何导出到 json 对象并正确附加。

使用的代码

a=[]
     array.append(df1.to_json(orient='records', lines=True)) 
     array.append(df2.to_json(orient='records', lines=True)) 

结果

['"test:"w","param":1','"test:"w2","param":2]']

要求的结果

["test":"w","param":1,"test":"w2","param":2]

【问题讨论】:

你能添加一些数据样本吗? 你要的不是“json对象”而是字典,使用df.to_dict() 【参考方案1】:

我认为需要创建字典然后转换为json:

import json
d = df1.to_dict(orient='records')
j = json.dumps(d)

或者如果可能的话:

j = df1.to_json(orient='records')

【讨论】:

当我试图将此数据附加到数组中时。它抛出这个错误: AttributeError: 'dict' object has no attribute 'append' 。代码:data.append(j) @jason - 嗯,orient='records' 返回dict 的列表,所以追加应该可以工作。您可以添加数据输入示例和您的代码吗?因为我无法模拟你的问题。谢谢。 很抱歉它有效,但我在 json 前后得到单引号。例如:['["id":1,"param":"data"]'] 我在追加时不需要这些单引号。没有它如何插入数据? 这个' 是因为json - text。所以需要dictionary 来避免它。如果使用array.append(df1.to_dict(orient='records')) 它不起作用? 酷!我得到了它。 df1 = df1.fillna('') 已修复 :)【参考方案2】:

这对我有用:

import pandas as pd
import json

df = pd.DataFrame(["test":"w","param":1,"test":"w2","param":2])
print(df)
    test  param
0     w      1
1    w2      2

所以现在我们转换为json string

d = df.to_json(orient='records')
print(d)
'["test":"w","param":1,"test":"w2","param":2]'

现在我们将这个字符串解析为一个字典列表:

data = json.loads(d)
print(data)
['test': 'w', 'param': 1, 'test': 'w2', 'param': 2]

【讨论】:

以上是关于将 pandas 数据帧转换为 json 对象 - pandas的主要内容,如果未能解决你的问题,请参考以下文章

将嵌套对象的JSON转换为Pandas Dataframe

将 pandas 数据帧转换为 json 很慢

使用 Python3 将 Bytes 对象转换为 Pandas 数据帧会产生一个空数据帧。为啥?

从 Pandas 数据帧转换为 TensorFlow 张量对象

遍历 url 端点并将 json 转换为 pandas 数据帧

从 json 对象创建 pandas 数据框