1

数日前に同様の質問がありましたが、解決されましたが、現在、一部のファイルには非常によく似たファイルがありますが、ヘッダーの名前の前にスペースまたは「。」があります。結局、それはうまくいきません。

だから、私はこのデータを持っています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つのフィールドは常にこの形式であることがわかっています。変更されるのは、ヘッダー内の名前だけです。

4

1 に答える 1

0

それらが常に同じ位置にあることがわかっている場合は、のように言うことができますparse_dates=[[0,1,2,3,4]]

于 2012-09-13T19:23:13.100 に答える