将 DataFrame 作为 JSON 与附加数据相结合

ora*_*nge 0 python json pandas

我想将一些元信息与 Pandas DataFrame 作为 JSON 字符串组合在一起。

我可以调用df.to_json(orient='values')将 DataFrame 的数据作为数组获取,但是如何将它与一些其他数据结合起来?

result = {
  meta: {'some': 'meta info'},
  data: [[dataframe.values], [list], [...]]
}
Run Code Online (Sandbox Code Playgroud)

我还可以问:如何将 Python 对象 ( meta: {...}) 合并为序列化的 JSON 字符串 ( df.to_json())?

fur*_*ras 5

您始终可以将 JSON 转换为 Python 数据。

import json

df_json = df.to_json(orient='values') # JSON

py_data = json.loads( df_json ) # Python data

result['extra_data'] = py_data # merge data

json_all = json.dumps( result ) # JSON again
Run Code Online (Sandbox Code Playgroud)

编辑:

我找到了更好的解决方案 - 使用pandas.json.dumps
标准模块json遇到了熊猫制作的字典中使用的 numpy 数字的问题。

import pandas as pd

result = { 'meta': {'some': 'meta info'} }

df = pd.DataFrame([[1,2,3], [.1,.2,.3]], columns=('a','b','c'))

#result['extra_data'] = df.to_dict() # as dictonary

result['extra_data'] = df 

print pd.json.dumps( result )
Run Code Online (Sandbox Code Playgroud)

结果

{
  "extra_data":{
      "a":{"0":1.0,"1":0.1},
      "c":{"0":3.0,"1":0.3},
      "b":{"0":2.0,"1":0.2}
  },
  "meta":{"some":"meta info"}
}
Run Code Online (Sandbox Code Playgroud)

或者

import pandas as pd

result = { 'meta': {'some': 'meta info'} }

df = pd.DataFrame([[1,2,3], [.1,.2,.3]], columns=('a','b','c'))

df_dict = df.to_dict()

df_dict['extra_data'] = result

print pd.json.dumps( df_dict )
Run Code Online (Sandbox Code Playgroud)

结果

{
   "a":{"0":1.0,"1":0.1},
   "c":{"0":3.0,"1":0.3},
   "b":{"0":2.0,"1":0.2}
   "extra_data":{"meta":{"some":"meta info"}},
}
Run Code Online (Sandbox Code Playgroud)