Экспорт pandas dataframe в json и обратно в dataframe со столбцами в том же порядке - PullRequest
0 голосов
/ 24 декабря 2018

Я написал две небольшие программы:

  • Первая импортирует данные из файла .txt во фрейм данных pandas, манипулирует данными и экспортирует окончательные данные в файл json.
  • Второй код импортирует данные из этого файла json обратно во фрейм данных.

К сожалению, порядок столбцов изменяется, когда данные импортируются из файла json.В Интернете я видел несколько примеров, где OrderedDict использовался для создания фиксированной структуры в новой таблице, но как я могу применить OrderedDict к существующей таблице?

Я пробовал несколько версий, включая приведенные ниже, но ни одна из них не работала:

df = OrderedDict(pd.DataFrame.from_dict(json_data, orient='columns'))

и

data = OrderedDict(pd.read_csv('wtx2015.txt', sep=",", header=None))

Код: .txt> pandasфрейм данных> json

import pandas as pd
import json
from pandas import DataFrame
from collections import OrderedDict

pd.set_option("max_columns", 50)

"""Defining functions"""

data = pd.read_csv('wtx2015.txt', sep=",", header=None)
data.columns = ["category1", "category2", "category3", "category4"]

"""Manipulating data"""

print(data.head(n=3))

df = DataFrame(data, columns= ["category1", "category2", "category3", "category4", "category5"])

final = df.to_json(orient='records')
with open('pandas_test.json', 'w') as f_obj:
    f_obj.write(final)

код: json> фрейм данных pandas

import pandas as pd
import json

file = 'pandas_test.json'
with open(file) as f_obj:
    json_data = json.load(f_obj)

df = pd.DataFrame.from_dict(json_data, orient='columns')

print(df)

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете использовать параметр orient='split' в to_json/read_json, который также сохраняет имена столбцов json в списке в оригинальном порядке:

df = pd.DataFrame({
        'C':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'A':[7,8,9,4,2,3],
})

print (df.to_json(orient='split'))

{"columns":["C","B","A"],
 "index":[0,1,2,3,4,5],
 "data":[["a",4,7],["b",5,8],
         ["c",4,9],["d",5,4],["e",5,2],["f",4,3]]}

df.to_json('file.json', orient='split')
df = pd.read_json('file.json', orient='split')
print (df)
   C  B  A
0  a  4  7
1  b  5  8
2  c  4  9
3  d  5  4
4  e  5  2
5  f  4  3

Другой вариант:

df.to_pickle('file')
df = pd.read_pickle('file')

И следующийальтернативой является добавление имен столбцов json в список:

import json

j = {'columns': df.columns.tolist(), 'data' : df.to_dict(orient='records')}
print (j)
{'columns': ['C', 'B', 'A'], 
 'data': [{'C': 'a', 'B': 4, 'A': 7}, 
          {'C': 'b', 'B': 5, 'A': 8}, 
          {'C': 'c', 'B': 4, 'A': 9}, 
          {'C': 'd', 'B': 5, 'A': 4}, 
          {'C': 'e', 'B': 5, 'A': 2}, 
          {'C': 'f', 'B': 4, 'A': 3}]}

file = 'file.json'
with open(file, 'w') as f_obj:
    json.dump(j, f_obj)

with open(file) as f_obj:
    json_data = json.load(f_obj)

df = pd.DataFrame(json_data['data'], columns=json_data['columns'])
print(df)
   C  B  A
0  a  4  7
1  b  5  8
2  c  4  9
3  d  5  4
4  e  5  2
5  f  4  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...