Конвертировать JSON с подполями в CSV в Python

У меня есть файл с примером вывода JSON выглядит так: файл jsonoutput.txt:

[{"fruit": "orange", "id":1, "countries": ["Portugal"], "color": "Orange"}

{"fruit": "apple", "id":2, "countries": ["Portugal"], "color": "red"}]

Мне нужен вывод CSV как (файл Excel):

fruit id countries color
orange 1 Portugal Orange
apple 2  Spain     red

Теперь я получаю фрукты, как цвет страны оранжевый оранжевый 1 [u'Portugal'] Апельсиновое яблоко 2 [u'Spain'] красный

Как я могу удалить [], u и '' из стран столбца?

print (json.dumps(fruits)) - дает мне в выводе JSON

Это то, что я пытался конвертировать JSON в XLSX:

data= tablib.Dataset(headers=('Fruit','id','Countries','Color'))
importfile = 'jsonoutput.txt'
data.json = open(importfile. 'r').read()
data_export = data.export('xlsx')
with open('output.xlsx','wb') as f:
    f.write(data_export)
    f.close()

1 ответ

Решение

Вы могли бы использовать pandas.io.json.json_normalize

import pandas as pd
from pandas.io.json import json_normalize

d = [
    {"fruit": "orange", "id":1, "countries": ["Portugal"], "color": "Orange"},
    {"fruit": "apple", "id":2, "countries": ["Portugal"], "color": "red"}
]

df = pd.concat([json_normalize(d[i]) for i in range(len(d))], ignore_index=True)
df['countries'] = df['countries'].str.join(' ')

    fruit   id  countries   color
0   orange  1   Portugal    Orange
1   apple   2   Portugal    red

сохранить как .xlsx файл, используйте:

df.to_excel('filename.xlsx', index=False)

РЕДАКТИРОВАТЬ:

json_normalize это функция, которая нормализует полуструктурированные данные JSON в виде плоской таблицы.

Теперь я действительно понял, что мой код может быть упрощен до:

df = json_normalize(d) # no need for `pd.concat`

### Output:
#   fruit   id  countries   color
# 0 orange  1   ['Portugal']    Orange
# 1 apple   2   ['Portugal']    red

Удалять [] из countries колонка, я использовал pandas.Series.str.join, который pandas эквивалентно питону str.join,

Это нужно с самого начала countries столбец представляет собой список, содержащий элементы

df['countries'] = df['countries'].str.join(' ')

countries Столбец больше не является списком, когда вы присоединяетесь к элементам:

    fruit   id  countries   color
0   orange  1   Portugal    Orange
1   apple   2   Portugal    red
Другие вопросы по тегам