自然科学分野の観測データって運用している大学や学会が独自に決めたフォーマットで保存されてることが多くて、例えば以下のような感じです:
ABC...
......
......
......
...XYZ
YYMMDD hhmmss XXXXX YYYYY ZZZZZ TTTTT
YYMMDD hhmmss XXXXX YYYYY ZZZZZ TTTTT
YYMMDD hhmmss XXXXX YYYYY ZZZZZ TTTTT
YYMMDD hhmmss XXXXX YYYYY ZZZZZ TTTTT
先頭から複数行にわたって観測点などの情報が記述されていて
その後複数列に分けて日付と時間が記述されています。
最悪なやつになると
YY MM DD hh mm ss XXXXX YYYYY ZZZZZ TTTTT
みたいになっていて、、、本当に辛い。
このデータの多様性に大変困っていたのですが、
まあ、地道に頑張るしかないですよね。
色んな方の記事を参考にしつつ、
- read_csvのオプションskiprows=xxで複雑なヘッダーは飛ばす
- read_csvのオプションheader=Noneで1行目のデータが列名になるのを防ぐ
- read_csvのオプションnames=['A', ..., 'Z']で列名を指定
- str.catを使って複数の列を結合
- 結合した列をint型に変換
- できた配列をto_datetimeでdatetime型に変換
でできました。
記述:
import pandas as pd
import datetime
f = open("filename","r")
df=pd.read_csv(f, delim_whitespace=True, header=None, skiprows=23, names=['DAY', 'HOUR', 'X', 'Y', 'Z', 'T'], engine='python')
df['DATESTR'] = df['DAY'].astype(str).str.cat(df['HOUR'].astype(str))
df['intDATE'] = df['DATESTR'].astype(int)
DATE = pd.to_datetime(df['intDATE'],format='%y%m%d%H%M%S')
f.close()