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

如何用列表推导式从Pandas DataFrame按日期+时间提取值

看起来你在处理Pandas数据时遇到了小问题,我来帮你梳理一下解决方案:

首先得指出你原来代码里的小疏漏:for d, t in df其实是在遍历DataFrame的列名(也就是Date、Time、Value),完全不是你想要的遍历每一行的日期和时间组合,这就导致逻辑上出现了偏差。

下面给你几种实用的方案:

1. 直接生成纯数值列表

如果只是想要把所有Value按顺序整理成干净的数值列表,用iterrows()遍历每一行是最直接高效的:

value_list = [row['Value'] for _, row in df.iterrows()]

运行后得到的结果是[893, 990, 801, 701, 774],全是纯粹的数值,没有你讨厌的数组类型。

2. 生成(Date, Time)为键的字典(更贴合你的查找需求)

如果你的核心需求是通过「日期+时间」快速查找对应数值,那生成字典会更实用——毕竟列表没法直接通过键取值:

value_dict = {(row['Date'], row['Time']): row['Value'] for _, row in df.iterrows()}

之后你就能像这样快速获取目标值:

print(value_dict[('2017-01-05', 1600)])  # 输出 801
print(value_dict[('2017-02-01', 1800)])  # 输出 774

3. 修正你原来的筛选逻辑(不推荐,效率较低)

如果你坚持想用筛选的方式(比如考虑可能存在重复的(Date, Time)对),可以把原来的逻辑改成列表推导式,同时把数组转成单个数值:

# 用zip来遍历每一行的Date和Time组合
value_list = [df[(df['Date'] == d) & (df['Time'] == t)]['Value'].iloc[0] for d, t in zip(df['Date'], df['Time'])]

不过要提醒你,这种写法效率很低,因为每一次循环都要重新扫描整个DataFrame,数据量大的时候会明显变慢,所以优先推荐前两种方法。

内容的提问来源于stack exchange,提问作者Anthony W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:35