如何在Pandas数据框中查找与指定时间最接近的valid列时间
用Pandas查找最接近指定时间的温度值
需求说明
我已经把CSV格式的Excel数据导入成了Pandas DataFrame,手里有个指定时间1/1/2021 7:51:58 AM(存在sunrise_time变量里),需要写Python代码找出DataFrame的valid列中最接近这个时间的记录(预期结果是1/1/2021 7:53:00 AM),并拿到对应时间的tmpf温度值。
我目前的代码
month=1 day=1 sunrise_time = sunrise_sunset.loc[sunrise_sunset['Date'] == str(month)+'/'+str(day)+'/2021', 'Sunrise'] sunset_time = sunrise_sunset.loc[sunrise_sunset['Date'] == str(month)+'/'+str(day)+'/2021', 'Sunset'] sunrise_time = datetime.strptime(str(str(month)+'/'+str(day)+'/2021 '+sunrise_time).removeprefix('0 ').removesuffix('\nName: Sunrise, dtype: object'), "%m/%d/%Y %I:%M:%S %p")
解决方案
核心思路是统一时间格式,通过计算时间差的绝对值定位最接近的记录,具体步骤如下:
1. 统一时间列格式
首先要把DataFrame的valid列转换成datetime类型,否则字符串无法直接计算时间差:
import pandas as pd from datetime import datetime # 假设你的数据存储在名为df的DataFrame中 df['valid'] = pd.to_datetime(df['valid'], format="%m/%d/%Y %I:%M:%S %p")
2. 简化sunrise_time生成(可选优化)
你原来处理sunrise_time的方式太繁琐,用Pandas方法可以简化,避免手动处理字符串前缀后缀:
month = 1 day = 1 target_date = f"{month}/{day}/2021" # 直接提取对应日期的日出时间并转换为datetime对象 sunrise_str = sunrise_sunset.loc[sunrise_sunset['Date'] == target_date, 'Sunrise'].iloc[0] sunrise_time = pd.to_datetime(f"{target_date} {sunrise_str}", format="%m/%d/%Y %I:%M:%S %p")
3. 定位最接近时间并获取温度
计算每条记录与sunrise_time的时间差绝对值,找到差值最小的行,再提取对应tmpf值:
# 计算每条记录和sunrise_time的时间差绝对值 df['time_diff'] = abs(df['valid'] - sunrise_time) # 找到时间差最小的那一行 closest_record = df.loc[df['time_diff'].idxmin()] # 获取对应的温度值 target_temp = closest_record['tmpf'] # 验证结果 print(f"最接近的时间:{closest_record['valid'].strftime('%m/%d/%Y %I:%M:%S %p')}") print(f"对应温度:{target_temp}")
注意事项
- 必须保证
valid列和sunrise_time都是datetime类型,否则会报错 - 如果有多个记录的时间差完全相同,
idxmin()会返回第一个出现的记录
内容的提问来源于stack exchange,提问作者Tyler D
相关产品推荐
相关产品推荐

