数日前に同様の質問がありましたが、解決されましたが、現在、一部のファイルには非常によく似たファイルがありますが、ヘッダーの名前の前にスペースまたは「。」があります。結局、それはうまくいきません。
だから、私はこのデータを持っています1 :
Year,Day,Hour,Min,Sec.,P1S1
2003, 1, 0, 1,30.09, 0.295E+04
2003, 1, 1, 0,11.84, 0.297E+04
2003, 1, 2, 0, 8.26, 0.338E+04
2003, 1, 3, 0, 4.69, 0.291E+04
2003, 1, 4, 0, 1.11, 0.337E+04
そして、私はそれを読むことができます(ファイルを読むために必要な「Year」のYearの前にスペースが必要であることに注意してください!):
import pandas as pd
def parse(yr, doy, hr, min, sec):
yr, doy, hr, min = [int(x) for x in [yr, doy, hr, min]]
sec = float(sec)
mu_sec = int((sec - int(sec)) * 1e6)
sec = int(sec)
dt = datetime(yr - 1, 12, 31)
delta = timedelta(days=doy, hours=hr, minutes=min, seconds=sec, microseconds=mu_sec)
return dt + delta
# notice the need of a space before Year in ' Year', that is needed to read the file!
pd.read_csv(data1, parse_dates=[[' Year','Day','Hour','Min','Sec.']], date_parser=parse, index_col=0)
さて、同じことをdata2で試してみると(minの後にdata1に存在しなかった「。」があることに注意してください):
Year,Day,Hour,Min.,Sec.,P1S1
2003, 1, 0, 0, 0.00, 0.261E+04
2003, 1, 0, 5, 0.00, 0.281E+04
2003, 1, 0,10, 0.00, 0.268E+04
2003, 1, 0,15, 0.00, 0.305E+04
私がする時:
pd.read_csv(data2, parse_dates=[[' Year','Day','Hour','Min','Sec.']], date_parser=parse, index_col=0)
Python / Pandasがその「。」を予期していないため、エラーが発生します。'Min'の後、または'Year'の前にスペースのないファイルがある場合も同じです。または、これらの最初の5つのヘッダーフィールド名のその他のわずかな違い。
だから、私の質問は、これをより堅牢にする方法はありますか?最初の5つのフィールドは常にこの形式であることがわかっています。変更されるのは、ヘッダー内の名前だけです。