从 1 分钟到 15 分钟间隔重新采样 OHLC 数据时出现问题
Problem when resampling OHLC data from 1 min to 15min interval
我有一个数据集包含每 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
这意味着几乎一半的数据集是空的。
我搜索了很多但没有找到任何有用的东西。还有另一种方法可以将数据集重新采样为 15 分钟的间隔吗?导致数据集中出现空值的问题在哪里?
更多信息: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 分钟间隔的数据,我该如何解决这个问题?
您的 csv 文件已经很多天没有数据了(可能是在市场休市时?)。您可以 resample
然后只保留原始数据中存在的行,如下所示:
df = pd.read_csv("EURUSD_2020.csv")
df["datetime"] = pd.to_datetime(df["Date"]+" "+df["time"])
df = df.drop(["Date", "time"], axis=1).set_index("datetime").astype("float")
dff = df.resample("15min").agg({'Open':'first', 'High':'max', 'Low':'min', 'Close': 'last'})
dff = dff[dff.index.isin(df.index)]
我有一个数据集包含每 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
这意味着几乎一半的数据集是空的。 我搜索了很多但没有找到任何有用的东西。还有另一种方法可以将数据集重新采样为 15 分钟的间隔吗?导致数据集中出现空值的问题在哪里?
更多信息: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 分钟间隔的数据,我该如何解决这个问题?
您的 csv 文件已经很多天没有数据了(可能是在市场休市时?)。您可以 resample
然后只保留原始数据中存在的行,如下所示:
df = pd.read_csv("EURUSD_2020.csv")
df["datetime"] = pd.to_datetime(df["Date"]+" "+df["time"])
df = df.drop(["Date", "time"], axis=1).set_index("datetime").astype("float")
dff = df.resample("15min").agg({'Open':'first', 'High':'max', 'Low':'min', 'Close': 'last'})
dff = dff[dff.index.isin(df.index)]