как сформировать правильный JSON путем чтения данных csv и использования в полезной нагрузке API

#python #list #api #dictionary

#python #Список #API #словарь

Вопрос:

Я использую приведенный ниже код для формирования JSON путем считывания данных из csv

 df = pd.read_csv('/testdata.csv', dtype={

 "debt_type": str,
 "debt_amount": int,
 "interest_rate": float,
 "total_monthly_payment": int,
 "remaining_term,interest_payable": int})

finalList = []
finalDict = {}
grouped = df.groupby(['debt_type'])
for key, value in grouped:
    dictionary = {}

    j = grouped.get_group(key).reset_index(drop=True)
    dictionary['debt_type'] = j.at[0, 'debt_type']

    dictList = []
    anotherDict = {}
    for i in j.index:
        anotherDict['debt_amount'] = j.at[i, 'debt_amount']
        anotherDict['interest_rate'] = j.at[i, 'interest_rate']
        anotherDict['total_monthly_payment'] = j.at[i, 'total_monthly_payment']
        anotherDict['remaining_term'] = j.at[i, 'remaining_term']
        anotherDict['interest_payable'] = j.at[i, 'interest_payable']

        dictList.append(anotherDict)
        dictionary['loan_info'] = dictList
        finalList.append(dictionary)
        finalDict = finalList
 

и хотите достичь ниже

 {"loan_info":{"debt_amount":9000,"interest_rate":23,"total_monthly_payment":189,"remaining_term":129,"interest_payable":15356},"debt_type":"credit_card"}
 

однако то, что я получаю, приведено ниже

 [{'debt_type': 'credit_card', 'loan_info': [{'debt_amount': 9000, 'interest_rate': 12.2, 'total_monthly_payment': 189, 'remaining_term': 129, 'interest_payable': 15256}]}]
 

кто-нибудь может помочь здесь. заранее спасибо.

Ответ №1:

Я думаю, что все, что вам нужно, это использовать pandas.DataFrame.to_dict() и pandas.DataFrame.to_json().

Сразу после того, как вы прочитаете свой csv-файл, вы можете создать новый столбец loan_info , который будет форматировать все поля, которые вы хотите, в словарь Python :

 loan_info_cols = ['debt_amount', 'interest_rate', 'total_monthly_payment', 'remaining_term', 'interest_payable']
df['loan_info'] = df[loan_info_cols].apply(lambda x: x.to_dict(), axis=1)
 

Затем отбросьте столбцы, которые мы только что использовали :

 df = df.drop(loan_info_cols, axis=1)
 

Это то, что мы имеем на данный момент :

 print(df)

     debt_type                                          loan_info
0  credit_card  {u'total_monthly_payment': 189.0, u'interest_p...
1   debit_card  {u'total_monthly_payment': 165.0, u'interest_p...
 

Теперь вы можете преобразовать весь фрейм данных в JSON :

 df_json = df.to_json(orient='records', lines=True)
print(df_json)

{"debt_type":"credit_card","loan_info":{"total_monthly_payment":189.0,"interest_payable":15356.0,"interest_rate":23.0,"debt_amount":9000.0,"remaining_term":129.0}}
{"debt_type":"debit_card","loan_info":{"total_monthly_payment":165.0,"interest_payable":21354.0,"interest_rate":24.0,"debt_amount":8000.0,"remaining_term":167.0}}
 

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

1. большое спасибо :), это работает сейчас, как я могу удалить из начала имени узла

2. @DeveshJoshi Я отредактировал свой ответ. Теперь я рекомендую вам сначала преобразовать подмножество loan_info в словари Python, а затем весь фрейм данных в JSON.

3. @DeveshJoshi Если этот ответ решил ваш вопрос, пожалуйста, подумайте о том, чтобы принять его , нажав на галочку. Это указывает более широкому сообществу, что вы нашли решение, и дает некоторую репутацию как ответчику, так и вам. Это не обязательно делать.

4. о, не знаю об этом, так как я здесь новичок, теперь сделал все необходимое, спасибо за помощь 🙂