将包含pandas对象(系列/数据帧)的python元组、列表和字典转换为json
我知道我可以将pandas对象(如将包含pandas对象(系列/数据帧)的python元组、列表和字典转换为json,python,json,pandas,Python,Json,Pandas,我知道我可以将pandas对象(如Series,DataFrame)转换为json,如下所示: series1 = pd.Series(np.random.randn(5), name='something') jsonSeries1 = series1.to_json() #{"0":0.0548079371,"1":-0.9072821424,"2":1.3865642993,"3":-1.0609052074,"4":-3.3513341839} seriesmap = {"key1":
Series
,DataFrame
)转换为json,如下所示:
series1 = pd.Series(np.random.randn(5), name='something')
jsonSeries1 = series1.to_json() #{"0":0.0548079371,"1":-0.9072821424,"2":1.3865642993,"3":-1.0609052074,"4":-3.3513341839}
seriesmap = {"key1":pd.Series(np.random.randn(5), name='something')}
但是,当该系列被封装在其他数据结构中时,我应该做什么,比如字典,如下所示:
series1 = pd.Series(np.random.randn(5), name='something')
jsonSeries1 = series1.to_json() #{"0":0.0548079371,"1":-0.9072821424,"2":1.3865642993,"3":-1.0609052074,"4":-3.3513341839}
seriesmap = {"key1":pd.Series(np.random.randn(5), name='something')}
如何将上述映射转换为json,如下所示:
{"key1":{"0":0.0548079371,"1":-0.9072821424,"2":1.3865642993,"3":-1.0609052074,"4":-3.3513341839}}
simplejson
不起作用:
jsonObj = simplejson.dumps(seriesmap)
import pandas as pd
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
mapDict = {"key1":df}
print(pd.DataFrame(mapDict).to_json())
给予
这使得:
Traceback (most recent call last):
File "C:\Mahesh\repos\JavaPython\JavaPython\bin\py2.py", line 80, in <module>
print(pd.DataFrame(mapDict).to_json())
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\pandas\core\frame.py", line 224, in __init__
mgr = self._init_dict(data, index, columns, dtype=dtype)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\pandas\core\frame.py", line 360, in _init_dict
return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\pandas\core\frame.py", line 5231, in _arrays_to_mgr
index = extract_index(arrays)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\pandas\core\frame.py", line 5270, in extract_index
raise ValueError('If using all scalar values, you must pass'
ValueError: If using all scalar values, you must pass an index
回溯(最近一次呼叫最后一次):
文件“C:\Mahesh\repos\JavaPython\JavaPython\bin\py2.py”,第80行,在
打印(pd.DataFrame(mapDict.to_json())
文件“C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site packages\pandas\core\frame.py”,第224行,在uu init中__
mgr=self.\u init\u dict(数据、索引、列、数据类型=dtype)
文件“C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site packages\pandas\core\frame.py”,第360行,在初始目录中
将_arrays_返回给_mgr(数组、数据名、索引、列、dtype=dtype)
文件“C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site packages\pandas\core\frame.py”,第5231行,在\u array\u to \u mgr中
索引=提取索引(数组)
文件“C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site packages\pandas\core\frame.py”,第5270行,在extract\U索引中
raise VALUERROR('如果使用所有标量值,则必须通过'
ValueError:如果使用所有标量值,则必须传递索引
在系列地图上调用pd.DataFrame
,然后使用调用json
pd.DataFrame(seriesmap).to_json()
'{"key1":{"0":0.8513342674,"1":-1.3357052602,"2":0.2102391775,"3":-0.5957492995,"4":0.2356552588}}'
到目前为止,还没有一个实用程序可以序列化或反序列化包含Pandas对象的嵌套Python结构。即使是PyArrow(由Google开发)也无法处理复数。因此,如果您想使用它,您需要编写自己的代码
我最近开发了一个库(),它可以序列化/反序列化Python中的几乎所有内容。您可以尝试一下,并向我报告无法完全反序列化的内容。谢谢!-:)根本问题是json
模块不知道如何序列化numpy.float64
,pandasto_json
方法修复的东西。那么在DataFrame
中包装任何东西都可以吗?我的意思是我可能有DataFrame
本身而不是那个系列。此外,熊猫对象可以在任何复杂数据结构(元组、字典、列表)的任何深度嵌套多次。或者,我可能有元组、列表、字典,就像其他键所说的key2
。一切都会好起来吗?@Mahesha999不!并非任何事情都能奏效。您在dict
中建议了一个系列
,这应该会起作用。如果有dataframes
,我会建议一种不同的策略。对不起,我说的是“序列封装在其他数据结构中,比如字典”。顺便说一句,另一种策略是什么?实际上我希望能够序列化/反序列化任意python类型。我更喜欢json。Python本机类型(int、string、tuple、list、dictionary)可以通过simplejson轻松地进行序列化/反序列化…但是当涉及到pandas对象时,事情会变得一团糟。。。