我有一个类似的数据框:
df = pd.read_csv("fileA.csv", dtype=str, delimiter=";", skiprows = None, parse_dates=['Date'])
Date Buy Sell
0 01.08.2009 01:00 15 25
1 01.08.2009 02:00 0 30
2 01.08.2009 03:00 10 18
但我需要那个(在15分钟内):
Date Buy Sell
0 01.08.2009 01:00 15 25
1 01.08.2009 01:15 15 25
2 01.08.2009 01:30 15 25
3 01.08.2009 01:45 15 25
4 01.08.2009 02:00 0 30
5 01.08.2009 02:15 0 30
6 01.08.2009 02:30 0 30
7 01.08.2009 02:45 0 30
8 01.08.2009 03:00 10 18
....等等。
我尝试过df.resample()。但它不起作用。有人知道一个很好的熊猫方法吗?!
答案 0 :(得分:3)
如果fileA.csv如下所示:
Date;Buy;Sell
01.08.2009 01:00;15;25
01.08.2009 02:00;0;30
01.08.2009 03:00;10;18
然后你可以用
解析数据df = pd.read_csv("fileA.csv", delimiter=";", parse_dates=['Date'])
以便df
看起来像这样:
In [41]: df
Out[41]:
Date Buy Sell
0 2009-01-08 01:00:00 15 25
1 2009-01-08 02:00:00 0 30
2 2009-01-08 03:00:00 10 18
您可能需要检查df.info()
以确保使用三列成功将数据解析为DataFrame,并且Date列的dtype为datetime64 [ns]。由于您发布的repr(df)
以不同的格式打印日期,并且列标题与数据不对齐,因此很有可能数据尚未正确解析。如果这是真的并且您从csv发布了一些示例行,我们应该可以帮助您将数据解析为DataFrame。
In [51]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 3 columns):
Date 3 non-null datetime64[ns]
Buy 3 non-null int64
Sell 3 non-null int64
dtypes: datetime64[ns](1), int64(2)
memory usage: 96.0 bytes
正确解析DataFrame后,可以使用asfreq
重新采样到15分钟的时间段,并向前填充缺失值:
In [50]: df.set_index('Date').asfreq('15T', method='ffill')
Out[50]:
Buy Sell
2009-01-08 01:00:00 15 25
2009-01-08 01:15:00 15 25
2009-01-08 01:30:00 15 25
2009-01-08 01:45:00 15 25
2009-01-08 02:00:00 0 30
2009-01-08 02:15:00 0 30
2009-01-08 02:30:00 0 30
2009-01-08 02:45:00 0 30
2009-01-08 03:00:00 10 18