【问题标题】:Pandas DateTime comparison not yielding accurate resultsPandas DateTime 比较没有产生准确的结果
【发布时间】:2023-03-20 14:11:01
【问题描述】:

我有一个数据框,我试图在其中过滤日期列中的值介于StartDateFinishDate 之间的值。为了实现这一点,我从这些日期的字符串值中创建了带有pandas.to_datetime 的列,然后根据它进行过滤。

    result['date'] = pd.to_datetime(result.DateCreated)
    result['StartDate'] = pd.to_datetime(result.StartDate)
    result['FinishDate'] = pd.to_datetime(result.FinishDate)
    result = result[(result.date >= result.StartDate) &
                    (result.date <= result.FinishDate)]

使用的部分数据如下,左侧的 StartDateFinishDates 是上面代码之后的值,右侧是我包含的初始值,以防万一问题在to_datetime

,date,StartDate,FinishDate,startboundry,finishboundry,DateCreated,StartDate,FinishDate
0,2009-06-08,2009-05-01,2009-06-30,False,True,2009-06-08 00:00:00,2009-05-01,2009-06-30
1,2009-10-08,2009-08-01,2009-12-31,False,True,2009-10-08 00:00:00,2009-08-01,2009-12-31
2,2010-01-28,2010-01-01,2010-04-30,False,True,2010-01-28 00:00:00,2010-01-01,2010-04-30
3,2010-05-27,2010-05-01,2010-06-30,False,True,2010-05-27 00:00:00,2010-05-01,2010-06-30
4,2010-09-22,2010-08-01,2010-12-31,False,True,2010-09-22 00:00:00,2010-08-01,2010-12-31
5,2011-01-13,2011-01-01,2011-04-30,False,True,2011-01-13 00:00:00,2011-01-01,2011-04-30
6,2011-05-26,2011-05-01,2011-06-30,False,True,2011-05-26 00:00:00,2011-05-01,2011-06-30
7,2009-01-20,2009-01-01,2009-04-30,False,True,2009-01-20 00:00:00,2009-01-01,2009-04-30
8,2009-05-11,2009-05-01,2009-06-30,False,True,2009-05-11 00:00:00,2009-05-01,2009-06-30
9,2009-10-05,2009-08-01,2009-12-31,False,True,2009-10-05 00:00:00,2009-08-01,2009-12-31

其中一些将 (result.date &gt;= result.StartDate) 的初始条件读取为 False,即使它们显然是正确的。

2009-06-08 在时间和词法上都在 2009-05-01 之后,如果它只是进行字符串比较的话。

编辑添加了一些版本信息: 在确保 python pandas 等版本相同的过程中,收集了版本信息以在此处分享以防万一:

熊猫版本 0.16.2 蟒蛇版本2.7.9 ipython 3.2.0

【问题讨论】:

  • 您是否故意有两次“StartDate”和“FinishDate”列?
  • 是的,第二个 2 是 pd.to_dateframe 之前的原始值,我将其包含在此处以防它们提供一些见解。

标签: python datetime pandas filter dataframe


【解决方案1】:

过滤您可以使用的数据框

df[df.date1.between(date2,date3)]

【讨论】:

  • 你能解释一下你的答案吗?
  • 只是 date2、date3 还是 df.date2、df.date3?所有日期都是数据库中的行,而不仅仅是 date1
  • 这给出了相同的结果,但有一个更精简的过滤器版本很有用
猜你喜欢
  • 1970-01-01
  • 2020-09-23
  • 2018-04-25
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2020-08-31
相关资源
最近更新 更多