Pandas - JSON Expand не работает - Результат API для DF

У меня есть следующий код для получения данных из Shopify orders.json в DataFrame pandas. Код следующий и работает хорошо:

shopify_orders = pd.DataFrame()

page=1

while True:
            orders_url = (shopify_url+'orders.json?fields=order_number,user_id,created_at,id,name,financial_status,'+
                          'source_name,referring_site,line_items,total-price,'+
                          'shipping_address&page='+str(page)
                          )
            s          = requests.get(orders_url)

            if len(s.text)>13: 
                print('Getting Page Number: {} '.format(page))

                data = json.loads(s.text)
                orders = json_normalize(data, 'orders')

                shopify_orders = shopify_orders.append(orders)

                page += 1   
            else:
                print('Finished at Page: {} '.format(page))
                break

Результатом является фрейм данных с 11 столбцами. Два из этих столбцов: shipping_address и line_items - это вложенные файлы jsons.

Вы можете увидеть, как они вложены здесь: https://help.shopify.com/en/api/reference/orders/order

Мне нужно развернуть jsons в этих двух столбцах. Я пробовал разные подходы. Но я получаю ту же ошибку:

TypeError: ('Expected String or Unicode', 'occurred at index 0')

Что именно я делаю не так?

Вместо создания списка словарей попробуйте создать список DataFrames, который затем можно добавить с помощью pd.concat(). Также проверьте, позволяет ли ваша версия requests получить доступ к s.json().

chillin 13.09.2018 23:13

Так что, возможно, создайте пустой список вроде dfs = [] перед циклом while. Затем внутри цикла, когда ваш оператор if верен, вы можете попробовать dfs.append(pd.DataFrame(pd.io.json.json_normalize(s.json()))‌​) (или, возможно, pd.DataFrame.from_dict()). Очевидно, вы можете назначить промежуточные переменные, если хотите. После цикла вы должны вызвать df = pd.concat(dfs, sort=False). Может быть, что-то в этом роде.

chillin 13.09.2018 23:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
92
0

Другие вопросы по теме