Конвертировать 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