是否有比for循环更快的方法在datetime序列中忽略日期提取指定时间数据
高效实现方案
你当前使用的for循环+append的方式在数据量较大时性能会非常差,pandas内置的向量化时间属性操作可以实现百倍以上的效率提升,推荐使用以下方法:
import pandas as pd # 读取csv时直接将time列解析为datetime格式,减少后续转换开销 df = pd.read_csv("你的文件名.csv", parse_dates=["time"]) # 直接筛选17点0分0秒的行,无需拆分字符串或循环 target_df = df[ (df["time"].dt.hour == 17) & (df["time"].dt.minute == 0) & (df["time"].dt.second == 0) ].reset_index(drop=True)
如果需要灵活适配任意目标时间点,可以使用字符串匹配的方式:
target_time = "17:00:00" target_df = df[df["time"].dt.strftime("%H:%M:%S") == target_time].reset_index(drop=True)
补充说明
- 该方法基于pandas底层C实现的向量化运算,十万行级数据的筛选耗时普遍在100ms以内,远快于Python级别的for循环
- 如果需要补全缺失日期的对应时间点数据(缺失值设为NaN),可以使用时间序列重采样方法:
df = df.set_index("time").sort_index() # 按天取17点的数值,缺失日期自动补NaN target_df = df.asfreq("D", offset="17H").reset_index()
内容的提问来源于stack exchange,提问作者Andrew M
相关产品推荐
相关产品推荐

