Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑\檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1])

加入好友
加入社群
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王

pandas.read_csv(r”路徑\檔名.副檔名”) vs

csv.reader(io.TextIOWrapper) 有何差別?

myDataFrame = pandas.read_csv()

無法讀取每列長度不同的資料

 

每列代表不同年期現金流

長度不一樣實屬正常

Libre Office自動補逗點跟空值

反而會造成numpy_financial.irr()

運算錯誤

 

除非使用Libre,

若用記事本編輯逗點分隔檔

使用者也不會補逗點跟空值

csv.reader()在計算IRR的時候

較為好用

本篇只為特意用pandas處理

 

import pandas as pd
f1 = r”C:\Python\example\csvreader\skl_cashFlow.txt”
#f1每列長度不一樣
f2 = r”C:\Python\example\csvreader\skl_cashFlow.csv”
#f2每列長度一樣

df2 = pd.read_csv(f2) ;
#配合read_csv(),檔案還要加上11個欄標籤0~10,
#不然會將第一列資料當成欄標籤

#header=None可以讀取無欄標籤的csv檔
print(“DataFrame:\n”, df2,”\n”,type(df2),”\n”,”=”*30 )
# df1_Fail = pd.read_csv(f1) #將讀取失敗

#對DataFrame取值:
print(“.loc[]取值],取得Series物件\n”,\
df2.loc[0],”\n”,type( df2.loc[0] ),”\n”,”=”*30)
print(“將Series物件轉為list:\n”, list(df2.loc[0]) )

Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王

skl_cashFlow.csv每列內容

同新光增有利現金流

 

輸出的DataFrame:

Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王

輸出的Series物件

並將Series轉為list:

Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王

可以取得上面的list

去掉nan元素後,

就可以用numpy_financial.irr()

計算內部報酬率

 

程式碼:

import csv
import pandas as pd
f1 = r”C:\Python\example\csvreader\skl_cashFlow.txt”
#f1每列長度不一樣
f2 = r”C:\Python\example\csvreader\skl_cashFlow.csv”
#f2每列長度一樣

df2 = pd.read_csv(f2) ;
#配合read_csv(),檔案還要加上11個欄標籤0~10,
#不然會將第一列資料當成欄標籤
#print(“DataFrame:\n”, df2 ,”\n”,type(df2),”\n”,”=”*30 )
# df1_Fail = pd.read_csv(f1) #將讀取失敗

import numpy_financial as npf
import numpy as np
import math
import os
base = 0.01  # 基準利率
year_IRR =  [
    (“年”, “內部報酬率”,”總報酬率”,”絕對利差”,”相對利差”)    
    ]

for i in range( len(df2) ):
    csvlist = list( df2.loc[i] ) #取橫列,元素中含有nan
    csvlist = [ x for x in csvlist if math.isnan(x) == False  ]
    #print(csvlist) #去掉list中的nan
   
    csvAry = np.array( csvlist )
    #Array must not contain infs or NaNs
    #print(csvAry)

    myirr = npf.irr(csvAry)
    tot = sum(csvAry)/(-sum(csvAry[:-1]))
    rateDiff = myirr – base  # 絕對利差
    rateDiffRel = rateDiff/base  # 相對利差
    year = csvlist.index(csvlist[-1])
    #’numpy.ndarray’ object has no attribute ‘index’
    yearStr = “%02d” % year
    myirrStr = “%.4f %%” % (myirr*100)
    totStr = “%7.4f %%” % (tot*100)
    rateDiffStr = “%.2f %%” % (rateDiff*100)
    rateDiffRelStr = “%.2f %%” % (rateDiffRel*100)
    tup = \
    (yearStr, myirrStr, totStr, \
     rateDiffStr, rateDiffRelStr)
    year_IRR.append(tup)

for ele in year_IRR: print(“tuple:\n”,ele)

folder = r”C:\SavingKing”
fname = r”\IRR_Calculate.csv”
fpath = folder + fname
# print(path)

if not os.path.exists(folder):
    os.makedirs(folder)
   
dfFinal = pd.DataFrame(year_IRR)
print(“\nDataFrame Final:\n”,dfFinal)
 
dfFinal.to_csv(fpath)
#dfFinal.to_csv(fpath,index=False,header=None)
#輸出csv時可以去掉index跟header
#header=False也可,見pandas官網:
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
 
#with open(fpath, “w”,encoding=”UTF-8″ ) as f:
    #csv.writer(f).writerows(year_IRR)
    #csv.writer()也可以,
    #特意用pandas的.to_csv()處理

print(f”資料已寫入{fpath}”)
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
 
輸出結果:
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
 
輸出的csv檔:
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
(exe檔,無需python環境也可執行)
SavingKingIRR_csv.exe
需要自己寫好逗點分隔檔
支援首續期不同保費
以及一次計算多年期IRR
 
不用寫逗點分隔檔
但首續期保費需相同
一次只能算一個年期
 
畫面會停在
您將輸入n年度末解約金?n=?
待使用者輸入下一筆資料或-9999離開
 
dfFinal.to_csv(fpath,index=False,header=None,columns=[0,1])
只寫入columns 0,1:
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王
 

加入好友
加入社群
Python如何讀寫csv逗點分隔檔(每列內容為新光增有利現金流)?pandas.read_csv(r”路徑檔名.副檔名”),如何移除list中的nan元素?math.isnan(),如何計算新光增有利IRR?numpy_financial(array) ;輸出csv檔時如何去掉index跟header?如何選擇要寫入的直欄columns? dfFinal.to_csv(fpath, index=False, header=None, columns=[0,1]) - 儲蓄保險王

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡

You may also like...

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *