pythonのpandas.datetime.strptimeでは「YY/MM/dd」日付を表す文字列をdatetimeに変換できない?
前回「pythonのpandas.datetime.strptimeで日付を表す文字列をdatetimeに変換する」の続き。
前回は「YYYY/MM/dd」といった形式の日付文字列をdatetimeに変換した。
ところが、「YY/MM/dd」といった形式のデータも世の中にはある。例えば「15/05/01」
これらは変換出来るのだろうか。結論から言うと、出来ない(だろう)。
だってさ、「15/05/01」が「2015/05/01」なのか「1915/05/01」なのか、何も情報を与えなければ判断できないから。
なので、正直「YY/MM/dd」なんていう書式は世の中から抹消してほしい。
今回は、もらったファイルが「YY/MM/dd」(2000年代を想定)だったので無理やり変換した。
ソースは次。
inFile = cStringIO.StringIO(unzippedZf.read(fileName)) #cStringIOを使用して、zipファイルを展開せずにメモリ上で読み込む outFile = cStringIO.StringIO() count = 0 for line in inFile: if count==0: #元ファイルにヘッダがあるが、スキップする count += 1 continue count += 1 outFile.write(line.replace(line[:3],"\"20"+line[1:3])) #簡潔な方法が分からなかったので、とりあえず泥臭くても良いから実装
zipファイルの中のファイル(fileName)をunzippedZf.read(fileName)で読んで、 cStringIO.StringIOでメモリ(inFile)に格納。
for文で一行ずつ読み込んで「line.replace(line[:3],"\"20"+line[1:3])」で「YY/MM/dd」形式を「20YY/MM/dd」に変換した。
inFileを直接書き換える方法が分からなかったので、それをoutFileに格納した。