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

筛选DataFrame指定日期范围内行时遇KeyError问题求助

解决DataFrame日期筛选时的KeyError问题

兄弟,你的KeyError: 'TransDate'问题核心点特别明确——你的DataFrame里根本没有叫TransDate的列!别着急试那些日期筛选的技巧,先把最基础的问题搞定:

1. 先确认你的列名到底是什么

先跑一行代码把所有列名打出来,排查是否存在拼写、格式差异:

print(df.columns.tolist())

从你提供的DataFrame截图来看,很大概率是列名有空格、大小写差异或者拼写错误——比如是不是叫Trans Date(带空格)、transdate(全小写)或者Trans_Date(下划线)?这种细微的差异最容易踩坑。

2. 先清理列名(可选但实用)

如果发现列名格式混乱,先统一处理一下,避免后续踩格式坑:

# 去掉列名前后空格,把中间空格替换为下划线,统一转小写
df.columns = df.columns.str.strip().str.replace(' ', '_').str.lower()
# 比如原列是Trans Date,现在就变成trans_date,用这个列名做筛选
mask = (df['trans_date'] > '2017-01-15') & (df['trans_date'] <= '2017-12-20')
filtered_df = df[mask]

3. 别忘了把列转成日期类型

就算列名正确,如果这个列是字符串类型,日期筛选也可能出问题,先转成datetime格式:

# 把目标列转成日期类型,无法转换的内容会转为NaT(空日期)便于后续处理
df['TransDate'] = pd.to_datetime(df['TransDate'], errors='coerce')
# 再执行筛选逻辑
mask = (df['TransDate'] > '2017-01-15') & (df['TransDate'] <= '2017-12-20')
filtered_df = df[mask]

为啥你试的Stack Overflow方法没用?

那些方法的大前提是列名正确,且日期列是datetime类型,这两个条件不满足的话,再怎么试都是白搭。先把列名和数据类型的问题解决,再用那些方法就会正常生效了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:27