You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:07:35