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

使用字符串切片过滤Pandas DataFrame时触发IndexingError问题

解决Pandas DataFrame日期匹配的索引错误问题

我来帮你搞定这个问题~首先你遇到的IndexingError是因为你用了df['DATE'][:-3],这是对整个Series按行切片,取了前N-3行数据,而不是对每个日期字符串的末尾截掉3个字符。这样得到的Series长度和原DataFrame不一样,自然没法用来做布尔索引过滤啦。

不过还有个隐藏问题:你的DATE列格式是2017/11/28 14:19:58,截掉最后3位后是2017/11/28 14:19,但你的date变量格式是11/28/2017 14:19,年份和月日的顺序不一样,就算你改了切片方式,字符串也没法匹配上。下面给你两种靠谱的解决方法:

方法1:统一字符串格式后匹配

先把DATE列的字符串转换成和date变量一致的格式,再做切片比较:

# 先拆分DATE列的字符串,调整年、月、日的顺序,同时保留时分部分
df['DATE_formatted'] = df['DATE'].apply(lambda x: 
    f"{x.split('/')[1]}/{x.split('/')[2].split(' ')[0]}/{x.split('/')[0]} {x.split(' ')[1][:-3]}"
)
# 过滤匹配的行
df = df[df['DATE_formatted'] == date]

方法2:转换成datetime类型比较(推荐)

字符串处理容易出格式问题,更稳妥的方式是把两边都转换成Pandas的datetime类型,然后只比较到分钟级别:

import pandas as pd

# 把DATE列转换成datetime类型
df['DATE_datetime'] = pd.to_datetime(df['DATE'])
# 把date变量也转换成datetime类型
date_datetime = pd.to_datetime(date)

# 简洁写法:将datetime列向下取整到分钟,再和目标时间匹配
df = df[df['DATE_datetime'].dt.floor('min') == date_datetime]

这种方法不用纠结字符串格式的差异,datetime类型会自动处理日期顺序问题,是处理时间匹配更可靠的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:14:09