使用pandas过滤器和datetime函数的df子集

时间:2019-06-15 18:46:26

标签: python pandas datetime

我正在尝试过滤以下df:

datetemp | gamenum |score
2019-6-2    123      2
2019-4-5    314      4
2019-5-11   344      2
2019-4-29   324      1
2019-2-28   325      9
2019-1-30   231      7

我正在尝试执行以下操作,似乎应该可以使用:

import datetime

dateone = datetime.date(2019, 4, 1)
datetwo = datetime.date(2019, 6, 12)


df_filted_by_date = df[[(df['DATE_temp'] >= dateone and df['DATE_temp'] <= datetwo )]]
df_filted_by_date

应返回:

datetemp | gamenum |score
2019-6-2    123      2
2019-4-5    314      4
2019-5-11   344      2
2019-4-29   324      1

但是,根据上面代码的细微调整,我遇到了多个错误。感觉上面的应该工作。关于如何解决以上问题的任何提示?

3 个答案:

答案 0 :(得分:1)

编辑-

转换为日期时间格式

df["DATE_temp"] = pd.to_datetime(df["DATE_temp"])

请使用-

df_filted_by_date = df.loc[(df.DATE_temp>= dateone) & (df.DATE_temp<= datetwo)]

代替

df_filted_by_date = df[[(df['DATE_temp'] >= dateone and df['DATE_temp'] <= datetwo )]]

您只是错过了熊猫使用运算符的顺序。需要通过括号中的两个比较,然后应用AND(&)。

答案 1 :(得分:1)

您可以使用DatetimeIndex切片:

df.index = pd.to_datetime(df.index) # need to convert into DatetimeIndex
df_filted_by_date = df['2019-04-01':'2019-06-12']

答案 2 :(得分:0)

我不得不改变一些事情。

1)更改我设置日期值的方式:

AssociativeCache

2)我添加了一个新的步骤来隐藏大熊猫的日期时间:

public

3)使用AssociativeCacheDynamic的熊猫过滤器:

import datetime

dateone = datetime.datetime(2019, 4, 1)
datetwo = datetime.datetime(2019, 6, 12)

完整代码如下:

df["datecol"] = pd.to_datetime(df["datecol"])