我想讀取包含日期的csv文件。該CSV看起來是這樣的:熊貓從csv解析日期
h1,h2,h3,h4,h5
A,B,C,D,E,20150420
A,B,C,D,E,20150420
A,B,C,D,E,20150420
用於讀取CSV我使用此代碼:
df = pd.read_csv(filen,
index_col=None,
header=0,
parse_dates=[5],
date_parser=lambda t:parse(t))
分析函數如下:
def parse(t):
string_ = str(t)
try:
return datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
return datetime.date(1900,1,1)
我奇怪現在的問題是,在解析函數t
看起來像這樣:
ndarray: ['20150420' '20150420' '20150420']
正如你所看到的,t
是數據列的整個數組。我認爲解析第一行時應該只有第一個值,解析第二行時只需要第一個值,等等。現在,parse
總是以except-block結尾,因爲int(string_[:4])
包含一個括號,顯然,不能轉換爲int。解析函數的構建目的是一次只解析一個日期(例如,20150420
)。
我在做什麼錯?
編輯:
沒關係,我只是閱讀有關date_parser參數大熊貓文檔,它似乎按預期方式工作(當然;))。所以我需要適應我的代碼。我上面的例子是複製&從其他地方粘貼,我期望它的工作,因此,我的問題..我會報告回來,當我做我的代碼適應。
EDIT2:
我的解析函數現在看起來是這樣的,我想,代碼工作現在。如果我還是做錯了,請讓我知道:
def parse(t):
ret = []
for ts in t:
string_ = str(ts)
try:
tsdt = datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
tsdt = datetime.date(1900,1,1)
ret.append(tsdt)
return ret