一、引入第三方库
import numpy as npimport pandas as pdfrom datetime import datetimefrom datetime import timedelta
二、将原始数据改变为 xlsx格式。(如何自动读写WPS,有待查询)
2.1 导入初始数据到raw_data,
raw_data = pd.read_excel("C:\\123\\cashflow.xlsx")
2.2 整理字段信息 colunes information: 金融工具名称 起息日 到期日 付息周期 付息方式 计息方式 首个付息日 上个付息日 下一个收息日 面额 票面利率(%)
查看字段项下的数据类型
raw_data[‘金融工具名称’] 调取某列
data1.dtypes ### 查看column项下数据类型
三、 数据清理————————重要
数据转换
把计息方式,换成float型数据,按每X月计息一次来算,利随本清记为0;如有字符型数据换成 float;保存到data1
data1 = raw_data.replace(['A/360','A/365F','每月一次','每季一次','半年一次','每年一次','利随本清'],[360,365,1,3,6,12,0]) ### 字符型转为 int data1["起息日"]=[datetime.strptime(x,'%Y-%m-%d') for x in data1["起息日"]]data1["到期日"]=[datetime.strptime(x,'%Y-%m-%d') for x in data1["到期日"]]data1["首个付息日"]=[datetime.strptime(x,'%Y-%m-%d') for x in data1["首个付息日"]]data1["上个付息日"]=[datetime.strptime(x,'%Y-%m-%d') for x in data1["上个付息日"]]data1["下一个收息日"]=[datetime.strptime(x,'%Y-%m-%d') for x in data1["下一个收息日"]]#### 字符型转为日期型 # pd.to_datetime(raw_data["起息日"]) 也可转为日期型数据data1["票面利率(%)"]= data1["票面利率(%)"].astype('float64')data1["面额"]= data1["面额"].astype('float64') ####字符型转为float
dfname._stat_axis.values.tolist() # 输出行名称 dfname.columns.values.tolist() # 输出列名称
len(list(data1)) 或 data1.shape[1] 返回行数;
data1.shape[1] 返回列数#for i in range((len(list(data1)))
四、新增一列payable_interest ,记载下个付息日应收利息;first run error,due to strings,data clean 没考虑新投放
payable_days=data1['下一个收息日']-data1['上个付息日']payable_interest=data1["面额"]*data1['票面利率(%)']*payable_days[1].days/data1["计息方式"]data1.insert(data1.shape[1],"应计利息",payable_interest)
五。把 payable_interest 加到data1 的最后一列
data1=data1.append(payable_interest,ignore_index=False) why not
六、 输出到文件夹
data1.to_excel('C:\\123\\应计利息.xlsx')
最后代码如下
import numpy as npimport pandas as pdfrom datetime import datetimefrom datetime import timedelta### 将WPS格式转为XLSX格式raw_data = pd.read_excel("C:\\123\\固定产品核算余额.xlsx")### 查看columns信息,处理数据data1 = raw_data.replace(['A/360','A/365F','A/365','A/A','每月一次','每季一次','半年一次','每年一次','利随本清'],[360,365,365,365,1,3,6,12,0])### data1.dtypes 查看数据类型,首个付息日为 objectdata1["起息日"]=pd.to_datetime(data1["起息日"])data1["到期日"]=pd.to_datetime(data1["到期日"])data1["首个付息日"]=pd.to_datetime(data1["首个付息日"]) data1["上个付息日"]=pd.to_datetime(data1["上个付息日"]) data1["下一个收息日"]=pd.to_datetime(data1["下一个收息日"])data1["票面利率(%)"]= data1["票面利率(%)"].astype('float64')data1["面额"]= data1["面额"].astype('float64')payable_days=data1['下一个收息日']-data1['上个付息日']payable_interest=data1["面额"]*data1['票面利率(%)']*payable_days[1].days/data1["计息方式"]data1.insert(data1.shape[1],"应计利息-2",payable_interest)