Распаковать список словаря в фрейм данных Pandas

#python #json #pandas

#python #json #pandas

Вопрос:

Я пытался распаковать это как словарь или json в python pandas, но это не дает мне вывода в фрейм данных. Кто-нибудь может указать мне правильное направление?

0 [{'JournalLineID': 'XXX', 'AccountID': 'XXX', 'AccountCode': '200', 'AccountType': 'XXX', 'AccountName': 'XXX', 'Description': '', 'NetAmount': -428.0, 'GrossAmount': -428.0, 'TaxAmount': 0.0, 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}]}, {'JournalLineID': 'XXX2', 'AccountID': 'XXX', 'AccountCode': 'XXX', 'AccountType': 'EXPENSE', 'AccountName': 'Subscriptions - Software', 'Description': 'XXXX', 'NetAmount': 400.0, 'GrossAmount': 428.0, 'TaxAmount': 28.0, 'TaxType': 'INPUT', 'TaxName': 'Purchases 7%', 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}]}]

Когда я пытаюсь pd.DataFrame.from_records(df) , он выдает мне результат, который разбивается на буквы 0 [ { ' J o u r n a l ... s ' : [ ] } ] } ]

Когда я пытаюсь pd.DataFrame(df) , это вывод: 0 [{'JournalLineID': 'XXX', 'AccountID': 'XXX', 'AccountCode': '200', 'AccountType': 'XXX', 'AccountName': 'XXX', 'Description': '', 'NetAmount': -428.0, 'GrossAmount': -428.0, 'TaxAmount': 0.0, 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}]}, {'JournalLineID': 'XXX2', 'AccountID': 'XXX', 'AccountCode': 'XXX', 'AccountType': 'EXPENSE', 'AccountName': 'Subscriptions - Software', 'Description': 'XXXX', 'NetAmount': 400.0, 'GrossAmount': 428.0, 'TaxAmount': 28.0, 'TaxType': 'INPUT', 'TaxName': 'Purchases 7%', 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': 'XXX', 'TrackingOptionID': 'XXX', 'Options': []}]}]

Ответ №1:

Удалите начальный 0 и вызовите pd.DataFrame() оставшуюся часть.

Ответ №2:

Просто используйте pd.DataFrame() предоставление списка в качестве входных данных

 import pandas as pd

d = [{'JournalLineID': 'e08fdfe0-560f-40f5-8e99-f239e187808b', 'AccountID': '56278544-5930-4396-b2ef-0453731c7f51', 'AccountCode': '200', 'AccountType': 'CURRLIAB', 'AccountName': 'Accounts Payable', 'Description': '', 'NetAmount': -428.0, 'GrossAmount': -428.0, 'TaxAmount': 0.0, 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'ea68de6e-32b6-4e02-a748-f916315804b0', 'TrackingOptionID': '0b785474-a48f-4413-aba5-819db2852f10', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': '94006aa4-a890-424e-be13-9786aa58732a', 'TrackingOptionID': '64b0f33a-d541-4316-bb41-6a0c3326d7a2', 'Options': []}]}, {'JournalLineID': 'cb2e42c7-b4e5-4ebb-875d-4ece7336efe4', 'AccountID': '64754738-d650-418e-8233-f578c9d65850', 'AccountCode': '652', 'AccountType': 'EXPENSE', 'AccountName': 'Subscriptions - Software', 'Description': 'Talenox Suite Plan - 48 pax - 11 June to 11 July 2020', 'NetAmount': 400.0, 'GrossAmount': 428.0, 'TaxAmount': 28.0, 'TaxType': 'INPUT', 'TaxName': 'Purchases 7%', 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'ea68de6e-32b6-4e02-a748-f916315804b0', 'TrackingOptionID': '0b785474-a48f-4413-aba5-819db2852f10', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': '94006aa4-a890-424e-be13-9786aa58732a', 'TrackingOptionID': '64b0f33a-d541-4316-bb41-6a0c3326d7a2', 'Options': []}]}, {'JournalLineID': '873e394f-10c1-4366-bad3-7521d1ff5957', 'AccountID': '50647912-37a6-4fd0-8717-7373f9ca32e0', 'AccountCode': '205', 'AccountType': 'CURRLIAB', 'AccountName': 'GST/VAT Control A/c', 'Description': '', 'NetAmount': 28.0, 'GrossAmount': 28.0, 'TaxAmount': 0.0, 'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'ea68de6e-32b6-4e02-a748-f916315804b0', 'TrackingOptionID': '0b785474-a48f-4413-aba5-819db2852f10', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 'TrackingCategoryID': '94006aa4-a890-424e-be13-9786aa58732a', 'TrackingOptionID': '64b0f33a-d541-4316-bb41-6a0c3326d7a2', 'Options': []}]}]

df = pd.DataFrame(d)
df

Out[11]: 
                          JournalLineID  ...       TaxName
0  e08fdfe0-560f-40f5-8e99-f239e187808b  ...           NaN
1  cb2e42c7-b4e5-4ebb-875d-4ece7336efe4  ...  Purchases 7%
2  873e394f-10c1-4366-bad3-7521d1ff5957  ...           NaN

[3 rows x 12 columns]
  

Комментарии:

1. Привет, спасибо за ваш ответ, я получил такой вывод: «0 [{‘JournalLineID’: ‘XXX’, ‘AccountId’: ‘XXX’, ‘AccountCode’: ‘200’, ‘AccountType’: ‘XXX’, ‘AccountName’: ‘Accounts XXX’,’Description’: «, ‘NetAmount’: -428,0, ‘GrossAmount’: -428,0, ‘TaxAmount’: 0.0, ‘TrackingCategories’: [{‘Name’: ‘Location’, ‘Option’: ‘SG’, ‘TrackingCategoryID’: ‘XXX’, ‘TrackingOptionID’: ‘XXX’, ‘Options’: []}, {‘Name’: ‘Sales Rep / Dept’, ‘Option’: ‘HQ’, ‘TrackingCategoryID’: ‘XXX, ‘TrackingOptionID’: ‘XXX’, ‘Options’: []}]}] 1 …

2. Этот ответ хорош тем, что он прост и понятен. Но вам нужно убрать начальный 0, как упоминал @Shradha.

3. Точно, если вы не удалите начальный 0, с наибольшей вероятностью вы загружаете pd.DataFrame() строку. Убедитесь, что тип объекта, который вы передаете в метод, на самом деле является списком (в данном случае словарей. Пожалуйста, посмотрите на мою общую переменную, присутствующую в ответе)

Ответ №3:

Я думаю, что ваш второй метод почти готов.

 import pandas as pd

Dictionary = [{'JournalLineID': 'XXX', 'AccountID': 'XXX', 'AccountCode': '200', 'AccountType': 'XXX', 'AccountName': 'XXX', 
               'Description': '', 'NetAmount': -428.0, 'GrossAmount': -428.0, 'TaxAmount': 0.0, 
               'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 
                                       'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 
                                                                                   'TrackingCategoryID': 'XXX', 
                                                                                   'TrackingOptionID': 'XXX', 'Options': []}]}, 
              {'JournalLineID': 'XXX2', 'AccountID': 'XXX', 'AccountCode': 'XXX', 'AccountType': 'EXPENSE', 
               'AccountName': 'Subscriptions - Software', 'Description': 'XXXX', 'NetAmount': 400.0, 'GrossAmount': 428.0, 
               'TaxAmount': 28.0, 'TaxType': 'INPUT', 'TaxName': 'Purchases 7%', 
               'TrackingCategories': [{'Name': 'Location', 'Option': 'SG', 'TrackingCategoryID': 'XXX', 
                                       'TrackingOptionID': 'XXX', 'Options': []}, {'Name': 'Sales Rep/Dept', 'Option': 'HQ', 
                                                                                   'TrackingCategoryID': 'XXX', 
                                                                                   'TrackingOptionID': 'XXX', 'Options': []}]}]
df = pd.DataFrame(Dictionary)
df
  

Вывод выглядит следующим образом:

     AccountCode AccountID   AccountName AccountType Description GrossAmount JournalLineID   NetAmount   TaxAmount   TaxName TaxType TrackingCategories
0   200 XXX XXX XXX     -428.0  XXX -428.0  0.0 NaN NaN [{'Name': 'Location', 'Option': 'SG', 'Trackin...
1   XXX XXX Subscriptions - Software    EXPENSE XXXX    428.0   XXX2    400.0   28.0    Purchases 7%    INPUT   [{'Name': 'Location', 'Option': 'SG', 'Trackin...