我知道我可以像Series
,DataFrame
这样将pandas对象转换为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}
不过,其他数据结构封装在字典里的时候我应该怎么说:
^{pr2}$如何将上述映射转换为json:
{"key1":{"0":0.0548079371,"1":-0.9072821424,"2":1.3865642993,"3":-1.0609052074,"4":-3.3513341839}}
simplejson
不起作用:
jsonObj = simplejson.dumps(seriesmap)
给予
Traceback (most recent call last):
File "C:\..\py2.py", line 86, in <module>
jsonObj = json.dumps(seriesmap)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\simplejson\__init__.py", line 380, in dumps
return _default_encoder.encode(obj)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\simplejson\encoder.py", line 275, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\simplejson\encoder.py", line 357, in iterencode
return _iterencode(o, 0)
File "C:\Mahesh\Program Files\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\simplejson\encoder.py", line 252, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: 0 -0.038824
1 -0.047297
2 -0.887672
3 -1.510238
4 0.900217
Name: something, dtype: float64 is not JSON serializable
为了进一步推广,我想将任意对象转换为json。任意对象可以是简单的int、string或复杂类型,比如tuple、list、dictionary,其中包含pandas对象以及其他类型。在字典中,pandas对象可以作为某个键的值位于任意深度。我希望将这种结构安全地转换为有效的json。有可能吗?在
更新
我只是尝试将DataFrame封装为dictionary的某个键的值,并通过封装到另一个DataFrame中(如下面的答案所示),将该dictionary转换为json。但似乎不起作用:
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
在
seriesmap
上调用pd.DataFrame
,然后使用to_json
相关问题 更多 >
编程相关推荐