提取时间戳在特定范围内的 Python Pandas 记录[关闭]
Posted
技术标签:
【中文标题】提取时间戳在特定范围内的 Python Pandas 记录[关闭]【英文标题】:Extracting Python Pandas records where Timestamp is within specific range [closed] 【发布时间】:2020-11-30 15:56:19 【问题描述】:我有一个数据框 df,其中一列存储处理时间(TimeStamp 对象)。
一个示例数据框:
from datetime import datetime, date
import pandas as pd
ids = ['WO_EW-1_10AUR-15-0031_00', 'IW-12_0400-15-0012_00', 'E-8_10AUR-18-0037_00']
dates = [date(2015,9,14), date(2015,9,17), date(2018,8,16)]
datetimes = [datetime(2015,9,14,13,23,40), datetime(2015,9,17,9,6,7), datetime(2018,8,16,7,32,6)]
datalist = list(zip(ids, dates, datetimes))
df = pd.DataFrame(datalist, columns=['ID', 'ProcessDate', 'ProcessingTime'])
我想要实现的是提取所有满足某个条件(或多个条件)的记录。在一种情况下,我想定位 'ProcessingTime' 属性具有小时值大于 13:10 的所有记录。 在上面的示例数据框中,在这种情况下所需的输出将是第一条记录。
将此类条件应用于数据框记录的正确方法是什么?
附: 我尝试使用以下方法,但均无效:
df.loc[ (df['ProcessTime'].time().hour > 14) ]
这会引发“AttributeError”,因为'Series' 对象没有属性'time'
和
df.loc[ (df['ProcessTime'] > datetime.time(14, 0, 0) ]
这会引发“TypeError”,因为 dtype=datetime64[ns] 和时间之间的比较无效
【问题讨论】:
这能回答你的问题吗? Select DataFrame rows between two dates 【参考方案1】: 问题是Boolean Indexing 没有使用pandas.dt
accessor 正确执行
给定一个具有 datetime dtype 的列,可以使用 .dt.
后跟所需的方法(例如 pandas.Series.dt.time
)访问 datetime 对象的组件
这里是Time/date components
import pandas as pd
from datetime import date, datetime, time
ids = ['WO_EW-1_10AUR-15-0031_00', 'IW-12_0400-15-0012_00', 'E-8_10AUR-18-0037_00']
dates = [date(2015,9,14), date(2015,9,17), date(2018,8,16)]
datetimes = [datetime(2015,9,14,13,23,40), datetime(2015,9,17,9,6,7), datetime(2018,8,16,7,32,6)]
datalist = list(zip(ids, dates, datetimes))
df = pd.DataFrame(datalist, columns=['ID', 'ProcessDate', 'ProcessingTime'])
# display(df)
ID ProcessDate ProcessingTime
0 WO_EW-1_10AUR-15-0031_00 2015-09-14 2015-09-14 13:23:40
1 IW-12_0400-15-0012_00 2015-09-17 2015-09-17 09:06:07
2 E-8_10AUR-18-0037_00 2018-08-16 2018-08-16 07:32:06
# single condition
df[df.ProcessingTime.dt.hour > 7]
[out]:
ID ProcessDate ProcessingTime
0 WO_EW-1_10AUR-15-0031_00 2015-09-14 2015-09-14 13:23:40
1 IW-12_0400-15-0012_00 2015-09-17 2015-09-17 09:06:07
# multiple conditions
df[(df.ProcessingTime.dt.hour > 7) & (df.ProcessingTime.dt.minute > 10)]
[out]:
ID ProcessDate ProcessingTime
0 WO_EW-1_10AUR-15-0031_00 2015-09-14 2015-09-14 13:23:40
# an entire datetime
df[df.ProcessingTime < '2015-09-17 09:06:07']
[out]:
ID ProcessDate ProcessingTime
0 WO_EW-1_10AUR-15-0031_00 2015-09-14 2015-09-14 13:23:40
# using .time
df[df.ProcessingTime.dt.time > time.fromisoformat('07:32:06')]
[out]:
ID ProcessDate ProcessingTime
0 WO_EW-1_10AUR-15-0031_00 2015-09-14 2015-09-14 13:23:40
1 IW-12_0400-15-0012_00 2015-09-17 2015-09-17 09:06:07
【讨论】:
以上是关于提取时间戳在特定范围内的 Python Pandas 记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章