Python 如何在时间范围内迭代?

Python 如何在时间范围内迭代?,python,pandas,datetime,indexing,time,Python,Pandas,Datetime,Indexing,Time,好的,我有一些来自csv文件的标准普尔500分钟数据。我希望根据时间遍历时间戳。到目前为止,代码如下所示: import datetime as dt import pandas as pd d = pd.read_csv('/Volumes/Seagate Portable/usindex_2020_all_tickers_awvbxk9/SPX_2020_2020.txt') d.columns = ['Dates', 'Open', 'High', 'Low', 'Close'] d.Da

好的,我有一些来自csv文件的标准普尔500分钟数据。我希望根据时间遍历时间戳。到目前为止,代码如下所示:

import datetime as dt
import pandas as pd
d = pd.read_csv('/Volumes/Seagate Portable/usindex_2020_all_tickers_awvbxk9/SPX_2020_2020.txt')
d.columns = ['Dates', 'Open', 'High', 'Low', 'Close']
d.Dates = pd.to_datetime(d.Dates)
d = d[(d.Dates.dt.time == dt.time(9, 30)) | (d.Dates.dt.time == dt.time(16, 0))].copy()
d.drop(['High', 'Low'], axis=1, inplace=True)
d.index = range(len(d.Open))

for i in d.index:
    if dt.time(16, 0) in d.Dates[i]:
        d['Open'][i] == np.NaN
    Date               Open Close
0   2020-01-02 16:00:00 3258.14 3257.98
1   2020-01-03 09:30:00 3226.36 3225.79
2   2020-01-03 16:00:00 3234.35 3234.57
3   2020-01-06 09:30:00 3217.55 3215.01
4   2020-01-06 16:00:00 3246.23 3246.28
5   2020-01-07 09:30:00 3241.86 3238.09
6   2020-01-07 16:00:00 3237.13 3237.18
7   2020-01-08 09:30:00 3238.59 3236.82
8   2020-01-08 16:00:00 3253.21 3253.06
9   2020-01-09 09:30:00 3266.03 3270.29
10  2020-01-09 16:00:00 3274.74 3274.66
11  2020-01-10 09:30:00 3281.81 3281.20
12  2020-01-10 16:00:00 3265.39 3265.34
13  2020-01-13 09:30:00 3271.13 3273.28
14  2020-01-13 16:00:00 3287.98 3288.05
15  2020-01-14 09:30:00 3285.35 3285.09
16  2020-01-14 16:00:00 3282.93 3282.89
17  2020-01-15 09:30:00 3282.27 3281.75
18  2020-01-15 16:00:00 3289.76 3289.40
19  2020-01-16 09:30:00 3302.97 3304.34
导入的csv如下所示:

import datetime as dt
import pandas as pd
d = pd.read_csv('/Volumes/Seagate Portable/usindex_2020_all_tickers_awvbxk9/SPX_2020_2020.txt')
d.columns = ['Dates', 'Open', 'High', 'Low', 'Close']
d.Dates = pd.to_datetime(d.Dates)
d = d[(d.Dates.dt.time == dt.time(9, 30)) | (d.Dates.dt.time == dt.time(16, 0))].copy()
d.drop(['High', 'Low'], axis=1, inplace=True)
d.index = range(len(d.Open))

for i in d.index:
    if dt.time(16, 0) in d.Dates[i]:
        d['Open'][i] == np.NaN
    Date               Open Close
0   2020-01-02 16:00:00 3258.14 3257.98
1   2020-01-03 09:30:00 3226.36 3225.79
2   2020-01-03 16:00:00 3234.35 3234.57
3   2020-01-06 09:30:00 3217.55 3215.01
4   2020-01-06 16:00:00 3246.23 3246.28
5   2020-01-07 09:30:00 3241.86 3238.09
6   2020-01-07 16:00:00 3237.13 3237.18
7   2020-01-08 09:30:00 3238.59 3236.82
8   2020-01-08 16:00:00 3253.21 3253.06
9   2020-01-09 09:30:00 3266.03 3270.29
10  2020-01-09 16:00:00 3274.74 3274.66
11  2020-01-10 09:30:00 3281.81 3281.20
12  2020-01-10 16:00:00 3265.39 3265.34
13  2020-01-13 09:30:00 3271.13 3273.28
14  2020-01-13 16:00:00 3287.98 3288.05
15  2020-01-14 09:30:00 3285.35 3285.09
16  2020-01-14 16:00:00 3282.93 3282.89
17  2020-01-15 09:30:00 3282.27 3281.75
18  2020-01-15 16:00:00 3289.76 3289.40
19  2020-01-16 09:30:00 3302.97 3304.34
我得到的错误是TypeError:Timestamp类型的参数不可编辑 我要做的是在16:00:00 NaN值填充所有打开的值,然后在该时间保持关闭valyes。我可以用相同的for循环遍历时间戳吗?或者是否有其他可能的方法对其进行排序并填写相应的NaN值?谢谢

in用于测试集合中的成员身份或查找字符串中的子字符串。您不能使用它来测试时间戳中的时间

for i in d.index:
    if dt.time(16, 0) == d.Dates[i]:
        d['Open'].loc[i] = np.nan

or

for i in d.index:
    if dt.time(16, 0) is d.Dates[i]:
        d['Open'].loc[i] = np.nan
如果要使用for循环,请执行以下操作:

但最好使用矢量化函数:

d['Open'] = d['Open'].mask(d['Dates'].dt.time == dt.time(16, 0))
in用于测试集合中的成员身份或查找字符串中的子字符串。您不能使用它来测试时间戳中的时间

如果要使用for循环,请执行以下操作:

但最好使用矢量化函数:

d['Open'] = d['Open'].mask(d['Dates'].dt.time == dt.time(16, 0))