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

无法匹配用户输入日期与DataFrame日期,代码未返回目标行求排查

问题:筛选DataFrame中日期匹配的行失败原因及解决方法

我尝试筛选出DataFrame中日期与用户输入日期匹配的行,但以下代码未返回目标行,请问问题出在哪里?

import pandas as pd
from datetime import datetime
df = pd.DataFrame({"Day": pd.to_datetime("2022-10-26"), "y": 5}, index=[0])
print(df)

get_year = input("Enter Year: ")
get_month = input("Enter Month: ")
get_day= input("Enter Day of Month: ")

inputdate = get_year+"-"+get_month+"-"+get_day
rundate1 = datetime.strptime(inputdate,'%Y-%m-%d')
rundate = (rundate1.date())
print(rundate)
x = df[df['Day']] == rundate
print(x)

错误原因分析

  • 筛选语法错误:你写的df[df['Day']] == rundate是完全错误的布尔筛选格式。正确的写法应该是将判断条件df['Day'] == rundate整体放入方括号中,作为DataFrame的索引,也就是df[df['Day'] == rundate],这样才能用布尔值筛选出符合条件的行。
  • 日期类型不匹配:DataFrame中的Day列是pandas的datetime64[ns]类型,而你生成的rundate是Python标准库的date类型,两种不同的日期类型直接比较会导致匹配失败,无法筛选出目标行。

修正后的代码

import pandas as pd
from datetime import datetime
df = pd.DataFrame({"Day": pd.to_datetime("2022-10-26"), "y": 5}, index=[0])
print(df)

get_year = input("Enter Year: ")
get_month = input("Enter Month: ")
get_day= input("Enter Day of Month: ")

inputdate = f"{get_year}-{get_month}-{get_day}"
# 方法1:将输入日期转为pandas datetime类型,与Day列类型保持一致
rundate = pd.to_datetime(inputdate)
# 正确的布尔筛选写法
matched_rows = df[df['Day'] == rundate]
print(matched_rows)

# 方法2:也可以将Day列转为Python date类型再比较
# matched_rows = df[df['Day'].dt.date == datetime.strptime(inputdate,'%Y-%m-%d').date()]
# print(matched_rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:45:48