我试图在价格图表的 csv 中查找给定时间段内的价格值。我已经使用 pd.to_datetime 函数将 Datetime 列转换为日期时间数据,但是我似乎找不到一种方法可以让我按单独的日期小时和分钟过滤行。典型的行看起来像这样。
Datetime 2021-10-15 19:55:00-04:00
Open 40.15
High 40.2
Low 40.14
Close 40.15
Volume 0
Dividends 0
Stock Splits 0
Name: 939, dtype: object
Empty DataFrame
Columns: [Datetime, Open, High, Low, Close, Volume, Dividends, Stock Splits]
Index: []
到目前为止,这是我的代码
import pandas as pd
data = pd.read_csv("Data\\09-16-21 AMC-5min", parse_dates=["Datetime"])
data["Datetime"] = pd.to_datetime(data['Datetime'])
newData = data[(data.Datetime.day == data.Datetime.day.max()) & data.Datetime.hour == 9 & data.Datetime.minute == 30]
print(newData)
在这个例子中,我试图找到最近一天 9:30 的数据点。当我尝试运行它时,出现以下错误
Traceback (most recent call last):
File "C:\Users\Zach\PycharmProjects\Algotrading\Test.py", line 7, in <module>
newData = data[(data.Datetime.day == data.Datetime.day.max()) & data.Datetime.hour == 9 & data.Datetime.minute == 30]
File "C:\Users\Zach\PycharmProjects\Algotrading\venv\lib\site-packages\pandas\core\generic.py", line 5487, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'day'
我不确定如何访问天、小时和分钟的单独值。任何建议将不胜感激
最佳答案
你需要.dt
具有 ()
的访问器用于第二个和第三个条件:
newData = data[(data.Datetime.dt.day == data.Datetime.dt.day.max()) &
(data.Datetime.dt.hour == 9) &
(data.Datetime.dt.minute == 30)]
仅转换为天一次:
s = data.Datetime.dt.day
newData = data[(s == s.max()) &
(data.Datetime.dt.hour == 9) &
(data.Datetime.dt.minute == 30)]
关于python - 如何在 python 中使用 Pandas 数据框按特定日期和时间进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69611773/