Python查找pandas DataFrame时间戳列忽略毫秒的指定日期时间
问题根源
判断失效是三个核心问题共同导致的:
- 类型不匹配:你用于匹配的对象是
pd.Timestamp类型,但df_processed_timestamps['time']列存储的是带T分隔符、带9位纳秒小数的ISO格式字符串,Python判断相等时会先校验类型,类型不同就算值看起来一致也会返回False。 - 格式错误:你写的
strftime格式化规则"%Y-%m-%d, %H:%M:%S"里,日期和时间之间多了一个多余的逗号,属于不必要的格式偏差。 - 精度未对齐:就算两边类型转成一致,DataFrame里的时间带毫秒/纳秒位,你没有做截断处理,整秒时间和带小数位的时间也无法直接匹配。
修复方案
不要混用时间对象和字符串做匹配,统一把两边转成相同的时间类型、对齐到秒级精度再判断,代码如下:
import pandas as pd from datetime import datetime last_timestamp = 1611903555682 # 1. 生成目标时间,截断到秒级 target_ts = pd.Timestamp(datetime.fromtimestamp(last_timestamp / 1000)).floor("s") # 2. 把DataFrame的时间列临时转成datetime类型,统一截断到秒级(不会修改原列数据) df_ts_col = pd.to_datetime(df_processed_timestamps["time"]).dt.floor("s") # 3. 做存在性判断 if target_ts in df_ts_col.values: print("Value is already in dataframe.") return
注:如果后续需要频繁对该时间列做筛选、计算操作,建议直接把列转成datetime类型永久存储,比存字符串的处理效率高很多,转换代码为
df_processed_timestamps['time'] = pd.to_datetime(df_processed_timestamps['time'])
内容的提问来源于stack exchange,提问作者gisk
相关产品推荐
相关产品推荐

