【问题标题】:Problem when resampling OHLC data from 1 min to 15min interval从 1 分钟到 15 分钟间隔重新采样 OHLC 数据时出现问题
【发布时间】: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


【解决方案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)]

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2022-01-09
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2021-12-10
    相关资源
    最近更新 更多