2016-05-02 6 views
1

私は1800年1月1日の英国の形式のファイルを読み込もうとしていますが、1667年以前のものもあります。これはナノ秒タイムスタンプ(http://pandas.pydata.org/pandas-docs/stable/gotchas.html#gotchas-timestamp-limits参照)。私はそのページから、私が必要とする範囲(http://pandas.pydata.org/pandas-docs/stable/timeseries.html#timeseries-oob参照)をカバーするために独自のPeriodIndexを作成する必要があることを理解していますが、このperiodindexの日付にCSVリーダーの文字列をどのように変換するのか分かりません。歴史的な日付のパンダでCSVファイルを読む

これまでのところ私が持っている:私はデータフレームにPeriodIndex/DateTimeIndex列を作成することができるように

span = pd.period_range('1000-01-01', '2100-01-01', freq='D') 
df_earliest= pd.read_csv("objects.csv", index_col=0, names=['Object Id', 'Earliest Date'], parse_dates=[1], infer_datetime_format=True, dayfirst=True) 

は、どのように私は日付リーダ/ Aコンバータへのスパンを適用していますか?

+0

スラッシュを読み込んで削除するのが最善だと思うので、そのリンクのメソッドを使用してperiodindexを作成することができます。読み込み後に 'df ['Earliest Date'] = df ['Earliest Date' ] .str.replace( '\\'、 '') '私は' read_csv'の 'parse_dates'パラメータを文字列として読み込むために渡しません。 – EdChum

答えて

0

あなたは、このようにそれをしようとすることができます

fn = r'D:\temp\.data\36987699.csv' 

def dt_parse(s): 
    d,m,y = s.split('/') 
    return pd.Period(year=int(y), month=int(m), day=int(d), freq='D') 


df = pd.read_csv(fn, parse_dates=[0], date_parser=dt_parse) 

入力ファイル:

Date,col1 
13/01/1800,aaa 
25/12/1001,bbb 
01/03/1267,ccc 

テスト:

In [16]: df 
Out[16]: 
     Date col1 
0 1800-01-13 aaa 
1 1001-12-25 bbb 
2 1267-03-01 ccc 

In [17]: df.dtypes 
Out[17]: 
Date object 
col1 object 
dtype: object 

In [18]: df['Date'].dt.year 
Out[18]: 
0 1800 
1 1001 
2 1267 
Name: Date, dtype: int64 

あなたはdt_parse()try ... catchブロックを追加することもできますPSキャッチする機能ValueError:例外 - 結果:int() ...

+0

私はtry/exceptを使ってそれをラップしました無効な日付文字列の場合はpd.NaTを返します(そうでない場合は分割がクラッシュします)。 – Richard

関連する問題