orange
orange

Reputation: 8068

Combine DataFrame as JSON with additional data

I want to combine some meta information together with a Pandas DataFrame as a JSON string.

I can call df.to_json(orient='values') to get the DataFrame's data as array, but how do I combine it with some additional data?

result = {
  meta: {'some': 'meta info'},
  data: [[dataframe.values], [list], [...]]
}

I could also ask: How do I merge a Python object (meta: {...}) into a serialised JSON string (df.to_json())?

Upvotes: 0

Views: 4246

Answers (1)

furas
furas

Reputation: 142641

You can always convert JSON into Python data.

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

EDIT:

I found better solution - use pandas.json.dumps
Standard module json got problem with numpy numbers used in dictionary made by pandas.

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 )

result

{
  "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"}
}

or

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 )

result

{
   "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"}},
}

Upvotes: 5

Related Questions