下面有一些代码将一些时间序列csv文件导入到数据框中,并将数据框的列名更改为具有时间日期的列的“日期”,其他列设置为文件名他们来自。到目前为止都很好。现在我想读入两个预设日期之间的数据。这是我遇到问题的地方。我无法让代码只将数据帧从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
下面的是我要导入的数据的示例
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
所以如果我将startDate设置为'02 / 01/2001'并将endDate设置为'05 / 01/2001'
代码会返回:
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
因此代码不会返回从CSV文件导入的所有数据,而是返回startDate和endDate之间的数据。我希望我能够充分解释自己,并且非常感谢任何帮助。感谢
答案 0 :(得分:3)
使用dtype
datetime
转换为pd.to_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