2016-04-12 11 views
2

いくつかのtimeseries csvファイルをデータフレームにインポートし、timeeriesの日付を持つカラムのデータフレームのカラム名を 'date'に変更するコードがあります。彼らが来たファイルの名前に設定します。これまでのすべての良い。今私は2つの事前に設定された日付の間にあるデータを読みたいと思います。これは私が問題を抱えているところです。 startDateからendDateまでのデータフレームだけを返し、他のデータ行を削除するコードを取得することはできません。データフレーム内のデータを日付でフィルタリングする

私はこれでいろいろなことをしましたが、フィルタを動作させることができません。以下の私のコードの現在のバージョンを確認してください:以下

def getTimeseriesData4(DataPath,columnNum,startDate,endDate): 
    colNames = ['date'] 

    path = DataPath 
    filePath = path, "*.csv" 
    allfiles = glob.glob(os.path.join(path, "*.csv")) 
    for fname in allfiles: 
     name = os.path.splitext(fname)[0] 
     name = os.path.split(name)[1] 

     colNames.append(name) 

    dataframes = [pd.read_csv(fname, header=None,usecols=[0,columnNum]) for fname in allfiles] 



    #this is the part where I am trying to filter out the data I do not need. So dataframes would only have data between the startDate and the endDate 
    dataframes = dataframes.set_index(['date']) 
    print(dataframes.loc[startDate:endDate]) 



    timeseriesData = reduce(partial(pd.merge, on=0, how='outer'), dataframes) 
    timeseriesData.columns=colNames 

    return timeseriesData 

を私は'02/01/2001' するたstartDateを設定する場合は、私はそう

  date BBG.BBG.AUDEUR.FX BBG.BBG.CADEUR.FX BBG.BBG.CHFEUR.FX \ 
0 01/01/2001    0.5932    0.7084    0.6588 
1 02/01/2001    0.5893    0.7038    0.6576 
2 03/01/2001    0.6000    0.7199    0.6610 
3 04/01/2001    0.5972    0.7021    0.6563 
4 05/01/2001    0.5973    0.6972    0.6532 
5 08/01/2001    0.5987    0.7073    0.6562 
6 09/01/2001    0.5972    0.7095    0.6565 
7 10/01/2001    0.5923    0.7105    0.6548 
8 11/01/2001    0.5888    0.7029    0.6512 
9 12/01/2001    0.5861    0.7013    0.6494 
10 15/01/2001    0.5870    0.7064    0.6492 
11 16/01/2001    0.5892    0.7047    0.6497 
12 17/01/2001    0.5912    0.7070    0.6507 
13 18/01/2001    0.5920    0.7015    0.6544 
14 19/01/2001    0.5953    0.7083    0.6535 

を輸入していたデータのサンプルで、

  date BBG.BBG.AUDEUR.FX BBG.BBG.CADEUR.FX BBG.BBG.CHFEUR.FX \ 
0 02/01/2001    0.5893    0.7038    0.6576 
1 03/01/2001    0.6000    0.7199    0.6610 
2 04/01/2001    0.5972    0.7021    0.6563 
3 05/01/2001    0.5973    0.6972    0.6532 

をだからではなく、すべてのデータIMをreturnng:endDateには

コードが戻ってくる'05/01/2001' であることをCSVファイルから移植された場合、コードはstartDateとendDateの間でデータを返します。私は自分自身を十分に説明し、どんな助けも高く評価されることを願っています。おかげ

+0

を受け入れ – EdChum

答えて

3

変換dtypepd.to_datetime使用datetimeへ:

In [98]: 
df['date'] = pd.to_datetime(df['date']) 
df.info() 

<class 'pandas.core.frame.DataFrame'> 
Int64Index: 15 entries, 0 to 14 
Data columns (total 4 columns): 
date     15 non-null datetime64[ns] 
BBG.BBG.AUDEUR.FX 15 non-null float64 
BBG.BBG.CADEUR.FX 15 non-null float64 
BBG.BBG.CHFEUR.FX 15 non-null float64 
dtypes: datetime64[ns](1), float64(3) 
memory usage: 600.0 bytes 

フィルタリング基準は、ブール値マスクを作成するよう次に、あなたの日付を渡すことができます。私の答えは、あなたがすることができ、あなたの疑問を解決した場合

In [97]: 
df[(df['date'] >= '02/01/2001') & (df['date'] <= '05/01/2001')] 

Out[97]: 
     date BBG.BBG.AUDEUR.FX BBG.BBG.CADEUR.FX BBG.BBG.CHFEUR.FX 
1 2001-02-01    0.5893    0.7038    0.6576 
2 2001-03-01    0.6000    0.7199    0.6610 
3 2001-04-01    0.5972    0.7021    0.6563 
4 2001-05-01    0.5973    0.6972    0.6532 
関連する問題