gpt4 book ai didi

python - 将 Pandas DataFrame 转换为 JSON 作为更大数据结构的元素

转载 作者:太空狗 更新时间:2023-10-29 21:34:21 44 4
gpt4 key购买 nike

我一直在我的服务器中使用 pandas DataFrame 对象,将它们转换为 CSV 以传输到浏览器,其中表格值使用 d3 绘制。虽然 CSV 就其本身而言是文件,但我确实需要的不仅仅是一个二维数据表。如果不出意外,我想返回一些关于数据的元数据。

所以我开始摆弄 JSON,认为我可以构建一个包含一些元信息和我的 DataFrame 的字典。例如,就像一个荒谬的简单例子:

>>> z = numpy.zeros(10)
>>> df = pandas.DataFrame(z)
>>> df
0
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
>>> result = {
... "name": "Simple Example",
... "data": df,
... }

毫不奇怪,不能使用 json 模块直接序列化。我找到了 jsonext 模块并尝试了它。它“有效”,但产生不完整的结果:

>>> jsonext.dumps(result)
'{"data": ["0"], "name": "Simple Example"}'

查看 DataFrame 本身为这类事情提供的方法,我发现了 to_dict() 和 to_json()。前者产生字典的字典:

>>> df.to_dict()
{0: {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0}}

但如您所见,它们无法序列化为 JSON,因为键不是字符串。

df.to_json() 看起来可能有效,但我最终会在另一个 JSON 字符串中嵌入一个 JSON 字符串。像这样:

json.dumps({"name": "Simple Example", "data": df.to_json()}) '{"data": "{\"0\":{\"0\":0.0,\"1\":0.0,\"2\":0.0,\"3\":0.0,\"4\":0.0,\"5\":0.0,\"6\":0.0,\"7\":0.0,\"8\":0.0,\"9\":0.0}}", "name": "Simple Example"}'

换句话说,有点乱。

关于如何处理这种其中某些元素无法直接序列化的嵌套结构,有什么建议吗?我想我可能能够让 jsonext 工作,但它的 Dict mixin 期望找到一个合适的(在它的脑海中) to_dict() 方法。 DataFrame.to_dict() 似乎没有返回正确的东西。 (尽管我会继续使用它。)

我想这一定是一只已经剥了皮的猫。我只是没有找到它。我现在很高兴没有比我的示例更具层次性的东西(尽管有更多的键/值对),尽管我不会对更通用的解决方案嗤之以鼻。

最佳答案

The default function (提供给 json.dumps)为默认情况下无法序列化的所有对象调用。它可以返回默认编码器可以序列化的任何对象,例如字典。

df.to_json() 返回一个字符串。 json.loads(df.to_json) 返回一个字典键是字符串。因此,如果我们设置 default=lambda df: json.loads(df.to_json()) 那么 DataFrame 将被序列化,就好像它是一个字典。

import json
import numpy as np
import pandas as pd

z = np.zeros(10)
df = pd.DataFrame(z)
result = {"name": "Simple Example",
"data": df, }

jstr = json.dumps(result,
default=lambda df: json.loads(df.to_json()))
newresult = json.loads(jstr)
print(newresult)
# {u'data': {u'0': {u'0': 0.0,
# u'1': 0.0,
# u'2': 0.0,
# u'3': 0.0,
# u'4': 0.0,
# u'5': 0.0,
# u'6': 0.0,
# u'7': 0.0,
# u'8': 0.0,
# u'9': 0.0}},
# u'name': u'Simple Example'}


print(pd.DataFrame(newresult['data']))

产量

   0
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0

关于python - 将 Pandas DataFrame 转换为 JSON 作为更大数据结构的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244323/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com