#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...