Если требуется хранить Dataframes в JSON, и они содержат non-ASCII символы (например, кириллицу), то следуется понимать, что используя df.to_json()
мы при дисериализации будем получать другой порядок столбцов, т.к. все non-ASCII столбцы будут перенесены в конец датафрейма. Поэтому стоит указать df.to_json(orient='recors')
, и сохранить индексы в один из столбцов датафрейма: df['index'] = pd.Series(df.index, index=df.index)
, а при десериализации использовать указанный столбец как индексы:
def serialize_df(df):
df['index'] = pd.Series(df.index, index=df.index)
res = df.to_json(orient='records')
return dumps(res)
def deserialize_df(df):
results = loads(df)
res = DataFrame.from_records(loads(results))
index = res.pop("index").tolist()
res.index = index
return res
Таким образом на выходе мы получим идентичный датафрейм:df.compare(deserialized_df)