#python #json #pandas
#python #json #pandas
Вопрос:
Я хочу объединить некоторую метаинформацию вместе с фреймом данных Pandas в виде строки JSON.
Я могу вызвать df.to_json(orient='values')
, чтобы получить данные фрейма данных в виде массива, но как мне объединить их с некоторыми дополнительными данными?
result = {
meta: {'some': 'meta info'},
data: [[dataframe.values], [list], [...]]
}
Я мог бы также спросить: как мне объединить объект Python ( meta: {...}
) в сериализованную строку JSON ( df.to_json()
)?
Ответ №1:
Вы всегда можете преобразовать 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
Редактировать:
Я нашел лучшее решение — использовать pandas.json.dumps
В стандартном модуле json
возникла проблема с числами numpy, используемыми в словаре, созданном 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 )
Результат
{
"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"}
}
или
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 )
Результат
{
"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"}},
}
Комментарии:
1. Верно, но это противоречит цели использования быстрого
to_json
метода pandas. Я не тестировал это, но я предполагаю, что будет быстрее прикрепитьdf.values
кresult
, а затем jsonify, чем проходить через проблемы сериализации / несериализации и сериализации снова.2. Смотрите новое решение в ответе.