使用字符串切片过滤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
相关产品推荐
相关产品推荐

