- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在我的服务器中使用 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/
我正在 Java 上开发 Tic Tac Toe 游戏(eclipse)。在我的计算机上,我的对话框非常小。我一直在努力把它做得更大。我没有任何运气。我希望这里有人能引导我走向正确的方向。下面的代码是
出于辅助功能的目的,我需要使所有可滚动控件(列表、 ListView )的滚动条更宽,滚动条箭头更大。 如何从可滚动控件(例如:TListView)获取滚动条( handle )? 如何使滚动条和箭头
在我的 flutter 应用程序中,我想制作一个圆圈作为这样的背景: 最佳答案 问题主要是当屏幕处于横向时,除非它覆盖整个屏幕,否则你不能在那里放置一个圆圈。 ClipRect 还有另一种方法,如果这
如何在列表中找到最接近的值,这将返回更高的值?示例:[3,7,12,19] 的列表,如果我的值为 8,我如何获得最接近(更大)的值 12?我想要 dart 中的这个逻辑。 最佳答案 只需过滤 List
我是一个绝对的 HTML 和 javascript 初学者,我很确定,这真的很容易实现。我生成了以下 IFRAME: document.write("");Das aktuelle Wetter in
我有点知道为什么压缩 DES 文件时它更大,但谁能给我正确的理由或链接,我似乎找不到任何原因? 谢谢:) 最佳答案 经过适当加密的密文在压缩程序看来非常像一系列随机数。如果没有以明文形式出现的模式,压
假设我有两个表,其中一个(我们称之为 person)有一个名为 type 的字段,该字段存储链接到另一个表的整数(我们称之为types 带有一个名为 id 的字段。什么会更能提高性能? 一个更大的查询
我有一个ListView,它使用GridView来显示DataTable,并且当新行添加到DataTable
我在只出现在 Firefox 中的导航菜单上遇到了一个奇怪的问题(在 IE7、8、9、10 和 Chrome 中工作正常)。菜单上的链接显示为 block ,但它们在 Firefox 中计算得比任何其
我正在使用 javax.mail 并获取邮件收件箱文件夹中的邮件计数。使用https://outlook.office.com/ Folder folderInbox = store.getFolde
我想让地球字形图标更大,以便它覆盖页面的大部分(它是矢量图像)。它不在按钮或任何东西中;它只是一个人。有没有办法做到这一点? 最佳答案 增加 glyphicon 的 font-size
我定制了一个看起来像这样的搜索栏 问题是很难捕获 slider 。所以我想做的是增加拇指的碰撞箱以使其更容易。我尝试了一些东西,但总是弄乱了搜索栏的外观。我有什么想法可以做到这一点吗? 布局.xml
我有一个问题:下载到 Documents 文件夹中的音乐比以前长 2 倍,而且体积更大。比特率也有问题(增加/减少 2 倍)。图片保存得很好,但任何音乐都有问题。也许我需要手动设置音频比特率,但我还没
为什么 div 区域仍然比图像 css 大? /image/WHDU3.jpg 如何设置 div 区域以适合图像? 最佳答案 IMG - 是行内元素,因此
我发现在对文本文件进行排序时非常困惑。不同的算法/应用程序会产生不同的结果,例如,比较两个字符串 str1=";P" 和 str2="-_-" 仅供引用,这里给出了这些字符串中每个字符的 ASCII:
我有一个应用程序已经在 Play 商店中存在多年,我刚刚构建了一个更新。该更新利用了 numberpicker,它的 min-sdk 为 11,并且在 v4 支持库中不适用。我倾向于发布我的新版本并在
你能告诉我如何强制 CSS 使 line-through 属性比元素 width 宽吗? 例如 50 结果看起来像现在如何使线条比元素更宽更明显? 赞 最佳答案 你可以使用 ,这是一种很俗气的方式 &
我想制作一个比应有的大得多的虚拟 Win32 EXE 文件。所以默认情况下,样板 Win32 EXE 文件为 80 KB。我想要一个 5 MB 的空间来测试其他一些实用程序。 第一个想法是添加资源,但
我有一个 UIView,里面有一个更大的 UIImageView。有没有办法隐藏超出 View 大小的内容? CGRect baseFrame = CGRectMake(100, 100, 300,
当我改变缓冲区的大小时,我得到了无法从 BufferedReader 解释的奇怪结果。 我曾强烈期望性能会随着缓冲区大小的增加而逐渐增加, yield 递减设置相当快,此后性能或多或少会持平。但看起来
我是一名优秀的程序员,十分优秀!