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

如何用Python Pandas df.loc匹配部分可变的时间值

解决Pandas中匹配日期部分筛选行的问题

嗨,这个问题我之前也碰到过!你遇到的Lengths must match错误是因为你把单元素列表和整个Series做比较,Pandas无法对齐两者的长度,所以抛出了报错。要实现匹配指定日期的所有时间行,这里有几种实用的方法:

方法1:字符串前缀匹配(适合Time列为字符串格式)

因为你的Time列是日期+时间的字符串,指定日期是字符串的前缀部分,可以用str.startswith()来筛选:

filtered_df = df.loc[df['Time'].str.startswith('1-1-2019')]

这个方法会检查每一行的Time字符串是否以目标日期开头,精准筛选出当天的所有记录。

方法2:转换为datetime类型(推荐,更灵活)

把Time列转换成Pandas的datetime类型后,时间相关的操作会更可靠和灵活,步骤如下:

  1. 首先转换列类型:
df['Time'] = pd.to_datetime(df['Time'])
  1. 然后可以通过提取日期部分来匹配:
# 提取日期并和目标日期比较
target_date = pd.to_datetime('1-1-2019').date()
filtered_df = df.loc[df['Time'].dt.date == target_date]

或者用dt.normalize()把时间部分归零后比较:

filtered_df = df.loc[df['Time'].dt.normalize() == pd.to_datetime('1-1-2019')]

转换成datetime类型后,你还能轻松实现按日期分组、筛选时间段等更多操作,比字符串匹配更适合长期维护。

补充:为什么你的原写法会报错?

你之前写的df.loc[df['Time'] == ['1-1-2019']]中,右侧是长度为1的列表,左侧是长度为3的Series,Pandas尝试逐元素对比时长度不匹配,所以抛出了Lengths must match的错误。即使改成df.loc[df['Time'] == '1-1-2019']也无法匹配,因为Time列的每个值都包含时间部分,和纯日期字符串完全不相等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:53:16