攝影或3C

Python讀取csv逗點分隔檔: pandas.read_csv(r”路徑\檔名.副檔名”) vs csv.reader(io.TextIOWrapper) 有何差別? 為何出現ParserError? #Parser:解析器,如何讀取Excel檔(xlsx)?pandas.read_excel()

先看以下兩個逗點分隔檔:

txt檔為記事本自行寫入

csv檔為Libre Office開啟後再儲存

發現csv檔(Libre)會自動補逗點跟空值

將所有列都捕到長度跟最長列一致

pandas.read_csv() vs

csv.reader()有何差別?

 

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每列長度一樣

with open(f1,”r”) as f:
  print(“open語法:”,f,type(f),”\n”)
  csvreader1 = csv.reader(f) ; print(“csv物件:”,f,”\n”)
  #csv.reader()裡面要放io.TextIOWrapper
  csvreader1_lst = [r for r in csvreader1]
  print(“將csv物件轉為可用的2D list:”,csvreader1_lst,”\n”)
with open(f2,”r”) as f:
  csvreader2 = csv.reader(f) ; print(“csv物件:”,csvreader2,”\n”)
  csvreader2_lst = [r for r in csvreader2]
  print(“將csv物件轉為可用的2D list:”,csvreader2_lst,”\n”)

df2 = pd.read_csv(f2) ;
print(“DataFrame:”, df2,type(df2) )
df1_Fail = pd.read_csv(f1) #將讀取失敗

csv.reader()輸出結果:

csv.reader()兩個檔案都能正常讀取

 

pandas.read_csv()輸出結果:

csv.reader()裡面要放io.TextIOWrapper

前面要用with open(“路徑\檔名.副檔名”, “r”) as f 

產生的f即為io.TextIOWrapper

不要在csv.reader()中誤放

“路徑\檔名.副檔名”

會無法讀取檔案內容

將錯誤的csv物件轉為list時

list會如下: 

[[‘C’], [‘:’], [‘\\’], [‘P’], [‘y’], [‘t’], [‘h’], [‘o’], [‘n’], [‘\\’], [‘e’], [‘x’], [‘a’], [‘m’], [‘p’], [‘l’], [‘e’], [‘\\’], [‘c’], [‘s’], [‘v’], [‘r’], [‘e’], [‘a’], [‘d’], [‘e’], [‘r’], [‘\\’], [‘s’], [‘k’], [‘l’], [‘_’], [‘c’], [‘a’], [‘s’], [‘h’], [‘F’], [‘l’], [‘o’], [‘w’], [‘.’], [‘t’], [‘x’], [‘t’]]

 

pandas.read_csv()

裡面放的就確實是”路徑\檔名.副檔名”

前面無需with open() as f : 的語法

無法讀取每列長度不同的逗點分隔檔

出現pandas._libs.parsers.raise_parser_error

ParserError:Error tokenizing data. C error: Expected 8 fields in line 3, saw 9

從pandas.Series()來看

pandas以直行(欄)為單位

DataFrame又是多個Series共用相同index

造成此問題

 

每列代表不同年期現金流

長度不一樣實屬正常

Libre Office自動補逗點跟空值

反而會造成numpy_financial.irr()

運算錯誤

先前寫的IRR計算機

最好可以加移除空元素的語法

避免使用者誤用Libre Office

寫逗點分隔檔

(exe檔,無需python環境也可執行)
SavingKingIRR_csv.exe
需要自己寫好逗點分隔檔
支援首續期不同保費
以及一次計算多年期IRR
不用寫逗點分隔檔
但首續期保費需相同
一次只能算一個年期
畫面會停在
您將輸入n年度末解約金?n=?
待使用者輸入下一筆資料或-9999離開

 

pandas讀取Excel檔(.xlsx)

import pandas as pd

f3 = r”C:\Python\example\csvreader\skl_cashFlowIRR2.xlsx”

df3 = pd.read_excel(f3) ;
print( df3,type(df3) )

#type為DataFrame

推薦hahow線上學習python: https://igrape.net/30afN

 

儲蓄保險王

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