Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将包含pandas对象(系列/数据帧)的python元组、列表和字典转换为json_Python_Json_Pandas - Fatal编程技术网

将包含pandas对象(系列/数据帧)的python元组、列表和字典转换为json

将包含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":

我知道我可以将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":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
,pandas
to_json
方法修复的东西。那么在
DataFrame
中包装任何东西都可以吗?我的意思是我可能有
DataFrame
本身而不是那个系列。此外,熊猫对象可以在任何复杂数据结构(元组、字典、列表)的任何深度嵌套多次。或者,我可能有元组、列表、字典,就像其他键所说的
key2
。一切都会好起来吗?@Mahesha999不!并非任何事情都能奏效。您在
dict
中建议了一个
系列
,这应该会起作用。如果有
dataframes
,我会建议一种不同的策略。对不起,我说的是“序列封装在其他数据结构中,比如字典”。顺便说一句,另一种策略是什么?实际上我希望能够序列化/反序列化任意python类型。我更喜欢json。Python本机类型(int、string、tuple、list、dictionary)可以通过simplejson轻松地进行序列化/反序列化…但是当涉及到pandas对象时,事情会变得一团糟。。。