首页 > 解决方案 > 如何在熊猫日期时间数据框中索引打开和关闭?

问题描述

好的,所以我有一个包含 2020 年标准普尔 500 指数的分钟数据的 csv,我正在寻找如何仅索引 9:30 和 4:00 的收盘价和开盘价。本质上,我只想要市场开盘和收盘的情况。到目前为止,代码是:

import pandas as pd
import datetime as dt
import numpy as np

d = pd.read_csv('/Volumes/Seagate Portable/usindex_2020_all_tickers_awvbxk9/SPX_2020_2020.txt')
d.columns = ['Dates', 'Open', 'High', 'Low', 'Close']
d.drop(['High', 'Low'], axis=1, inplace=True)
d.set_index('Dates', inplace=True)

d.head() 

它不会让我共享 csv 文件,但这是输出的样子:

                    Open    Close
Dates       
2020-01-02 09:31:00 3247.19 3245.22
2020-01-02 09:32:00 3245.07 3244.66
2020-01-02 09:33:00 3244.89 3247.61
2020-01-02 09:34:00 3247.38 3246.92
2020-01-02 09:35:00 3246.89 3249.09

我尝试过使用 loc 和 dt.time,我认为这是正确的编码方式,我只是想不出准确的代码来索引这 2 次。有任何想法吗?谢谢!

标签: pythonpandasdataframedatetimeindexing

解决方案


  • 如果在列 ( ).dt上使用提取器,则组件是,因此必须用于匹配,而不是'Dates'd.Dates.dt.time[0].timedatetime.time(9, 30)d.Dates.dt.time == dtime(9, 30)Booleand.Dates.dt.time == '09:30:00'
import pandas as pd
from datetime import time as dtime

# test dataframe
d = pd.DataFrame({'Dates': ['2020-01-02 09:30:00', '2020-01-02 09:31:00', '2020-01-02 09:32:00', '2020-01-02 09:33:00', '2020-01-02 09:34:00', '2020-01-02 09:35:00', '2020-01-02 16:00:00'], 'Open': [3247.19, 3247.19, 3245.07, 3244.89, 3247.38, 3246.89, 3247.19], 'Close': [3245.22, 3245.22, 3244.66, 3247.61, 3246.92, 3249.09, 3245.22]})

# display(d)
                 Dates     Open    Close
0  2020-01-02 09:30:00  3247.19  3245.22
1  2020-01-02 09:31:00  3247.19  3245.22
2  2020-01-02 09:32:00  3245.07  3244.66
3  2020-01-02 09:33:00  3244.89  3247.61
4  2020-01-02 09:34:00  3247.38  3246.92
5  2020-01-02 09:35:00  3246.89  3249.09
6  2020-01-02 16:00:00  3247.19  3245.22

# verify Dates is a datetime format
d.Dates = pd.to_datetime(d.Dates)

# use Boolean selection for 9:30 and 16:00 (4pm)
d = d[(d.Dates.dt.time == dtime(9, 30)) | (d.Dates.dt.time == dtime(16, 0))].copy()

# set the index
d.set_index('Dates', inplace=True)

# display(d)
                        Open    Close
Dates                                
2020-01-02 09:30:00  3247.19  3245.22
2020-01-02 16:00:00  3247.19  3245.22

推荐阅读