【发布时间】:2021-09-29 16:53:25
【问题描述】:
我有一个数据集,其中包含每 1 分钟的开盘价、最高价、最低价、收盘价,间隔为一年,如下所示:
Open High Low Close
Date_time
2020-01-01 17:00:00 1.12120 1.12121 1.12117 1.12120
2020-01-01 17:01:00 1.12106 1.12135 1.12106 1.12135
2020-01-01 17:02:00 1.12136 1.12139 1.12136 1.12139
2020-01-01 17:03:00 1.12135 1.12135 1.12120 1.12122
2020-01-01 17:04:00 1.12122 1.12125 1.12122 1.12125
此数据集中没有 NaN 或 Null,我检查了它:
df.isnull().sum()
输出:
Open 0
High 0
Low 0
Close 0
dtype: int64
我想将这些重新采样到 15 分钟间隔,方法是:
dff = df.resample('15min').agg({
'Open': 'first',
'High': 'max',
'Low': 'min',
'Close': 'last'})
输出将是:
Open High Low Close
Date_time
2020-01-01 17:00:00 1.12120 1.12139 1.12106 1.12127
2020-01-01 17:15:00 1.12127 1.12154 1.12127 1.12146
2020-01-01 17:30:00 1.12147 1.12156 1.12138 1.12154
2020-01-01 17:45:00 1.12155 1.12166 1.12143 1.12143
2020-01-01 18:00:00 1.12143 1.12218 1.12142 1.12202
听起来不错,但是当我运行时:
dff.isnull().sum()
输出是:
Open 10121
High 10121
Low 10121
Close 10121
dtype: int64
这意味着几乎一半的数据集是 Null。 我搜索了很多,但没有找到任何有用的东西。是否有另一种方法可以将数据集重采样为 15 分钟间隔?导致数据集中出现 Null 值的问题在哪里?
更多信息:dff 的大小为:
dff.count()
output:
Open 24919
High 24919
Low 24919
Close 24919
dtype: int64
更新: 我刚用过
dff = df.groupby(pd.Grouper(freq='15Min')).agg({"Open": "first",
"Low": "min",
"High": "max",
"Close": "last"})
但仍有一半的数据集为 Null。
我附上了数据集csv文件here
update#2 :感谢@not_speshal,我发现df 的大小是(372335,4),但df.resample("1min").last() 的大小是
(372275,4) 我认为这意味着我在某些 1 分钟间隔内没有数据,我该如何解决这个问题?
【问题讨论】:
-
您可能没有任何 15 分钟间隔的数据。检查
df.resample("1min").last()的大小和df的大小。 -
@not_speshal 没关系,两者的尺寸值相同
-
@not_speshal 对不起,你是对的,
df的大小是 (372335,4) 但重采样到 1 分钟的大小是 (372275,4) ,我该如何解决这个问题? -
您没有任何周末(周五下午 5 点到周日下午 5 点)的数据。这些天,Resample 正在填充 NaN。
-
@not_speshal,非常感谢,是的,我使用了
ohlc_dict = {'Open':'first', 'High':'max', 'Low':'min', 'Close': 'last'} df.resample('15Min').apply(ohlc_dict).dropna(how='any'),看来我们这里没有更多问题了。我很感激你的建议。谢谢。
标签: python-3.x pandas stock