基于其他DataFrame时间戳过滤Pandas DataFrame报错解决
解决Pandas用外部时间戳过滤DataFrame的报错问题
嗨,这个括号的坑我之前也踩过,咱们先搞明白报错原因,再给你两个简单靠谱的解决办法!
为什么会触发这个报错?
你写的dates2[[dates2['date'] <= most_recent_dates1]]用了双层方括号,这会让Pandas误以为你要索引列,但你括号里的是一个长度为1104的布尔序列(和dates2的行数完全匹配),Pandas找不到对应长度的列,自然就抛出了ValueError: Item wrong length 1 instead of 1104。
方法1:单层方布尔索引(最直接)
只需要去掉一层括号,直接用布尔掩码过滤行就行:
dates3 = dates2[dates2['date'] <= most_recent_dates1]
单层方括号会把里面的布尔序列当成行过滤的条件——每个元素对应dates2的一行,符合<= most_recent_dates1条件的行会被保留下来。
方法2:用query()函数(语法更清爽)
如果你喜欢更直观的写法,可以用query(),通过@符号引用外部变量most_recent_dates1:
dates3 = dates2.query('date <= @most_recent_dates1')
这种方式可读性更强,尤其是处理复杂过滤条件的时候,代码会更整洁。
验证结果
你可以打印dates3.shape看看,结果应该是(744, 1),和dates1的行数完全一致(31天×24小时=744行),说明过滤成功啦。
内容的提问来源于stack exchange,提问作者Sean McCarthy
相关产品推荐
相关产品推荐

