从Pandas身上移除特殊角色。用python编写的系列?

2024-09-30 06:31:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个名为financial的项目,我得到了输出,但我想从我的数据框中删除“-”符号,我尝试了更多请任何人帮我提前谢谢

我的python代码:

import pandas as pd
import numpy as np
from datetime import date
from flask import Flask, request
from flask.json import jsonify

app = Flask(__name__)


@app.route("/sampleCalc", methods=['post'])
def samplecalc():
    interestrate = float(request.json['interest'])
    years = int(request.json['duration'])/12
    paymentsyear = 12
    principal = int(request.json['principal'])
    currentdate = date.today()
    start_date = (date(currentdate.year, currentdate.month, currentdate.day))
    rng = pd.date_range(start_date, periods=years * paymentsyear, freq='MS')
    rng.name = "paymentDate"
    df = pd.DataFrame(index=rng, columns=['payment', 'roundpayment', 'principal', 'roundprincipal', 'interest', 'roundinterest', 'balance'],
                      dtype='float')
    df.reset_index(inplace=True)
    df.index += 1
    df.index.name = "Period"
    df["payment"] = np.pmt(interestrate / paymentsyear, years * paymentsyear, principal)
    df['roundpayment'] = round(df['payment'])
    df["principal"] = np.ppmt(interestrate / paymentsyear, df.index, years * paymentsyear, principal)
    df['roundprincipal'] = round(df['principal'])
    df["interest"] = np.ipmt(interestrate / paymentsyear, df.index, years * paymentsyear, principal)
    df['roundinterest'] = round(df['interest'])
    df = df.round(2)
    df["balance"] = 0
    df.loc[1, "balance"] = principal + df.loc[1, "principal"]
    for i in range(2, len(df) + 1):
        prev_balance = df.ix[i - 1, 'balance']
        principal = df.ix[i, 'principal']

        if prev_balance == 0:
            df.ix[i, ['payment', 'roundpayment', 'principal', 'roundprincipal', 'interest', 'roundinterest', 'balance']] = 0
            continue
        if abs(principal) <= prev_balance:
            df.ix[i, 'balance'] = principal + prev_balance

        else:

            if prev_balance <= abs(principal):
                principal = -prev_balance
                # addl_principal = 0
            else:
                print('else')
            df.ix[i, 'balance'] = 0
            df.ix[i, 'principal'] = principal
            df.ix[i, "payment"] = principal + df.ix[i, "interest"]
    df = df.round(2)
    d = [{k: df.values[i][v] for v, k in enumerate(df.columns)} for i in range(len(df))]
    return jsonify({"data": d})



if __name__ == '__main__':
    app.run(debug=True)

这是我的代码从这里将得到的电磁干扰计算的基础上,本金金额和利息和期限如下我提到我的输入使用,输入将得到这样的输出

{
    "data": [
        {
            "balance": 100414.94,
            "interest": -1666.67,
            "payment": -101251.73,
            "paymentDate": "Sat, 01 Jun 2019 00:00:00 GMT",
            "principal": -99585.06,
            "roundinterest": -1667,
            "roundpayment": -101252,
            "roundprincipal": -99585
        },
        {
            "balance": 0,
            "interest": -836.79,
            "payment": -101251.73,
            "paymentDate": "Mon, 01 Jul 2019 00:00:00 GMT",
            "principal": -100414.94,
            "roundinterest": -837,
            "roundpayment": -101252,
            "roundprincipal": -100415
        }
    ]
}

我的意见是

{
    "principal":200000,
    "interest":0.10,
    "duration":2
}

我想从输出中删除-symbol


Tags: importprincipaldfdateindexpaymentixbalance
1条回答
网友
1楼 · 发布于 2024-09-30 06:31:21

如果您想保持Dataframe的简洁,但只是影响JSON的输出,那么在创建jsonify的dict时,就可以得到数字的绝对值

# d = [{k: df.values[i][v] for v, k in enumerate(df.columns)} for i in range(len(df))]
d = df.to_dict("records")

keys_to_change = ["principal", "interest"]   # add whatever keys you want here

for record in d:
    for key in keys_to_change:
        record[key] = abs(record[key])

json_data = jsonify({"data": d})

要对所有数值动态执行此操作,请执行以下操作:

from pandas.api.types import is_numeric_dtype
#... 
for record in d:
    for key in record.keys():
        if pd.api.types.is_number(record[key]:
            record[key] = abs(record[key])

相关问题 更多 >

    热门问题