显示今天和过去一天之间的日期

时间:2020-03-27 16:40:42

标签: python python-3.x pandas

我有以下df:

<clr-icon [attr.shape]="link.icon" height="42" width="42"></clr-icon>

我要存档的是仅显示今天和以前计算的过去一天之间的日期。

data = {"Last check":['3/17/2017,'3/12/2020','3/2/2020','2/13/2018']}
df = pd.DataFrame(data)

因此,如果今天是2020-03-27,并且timedelta设置为26天前(2020-03-01),则输出应为:

def TimeDelta():

    import datetime as dt
    global result, today
    today = dt.date.today()
    how_many = input("How many days: ")
    result = today - timedelta(days=int(how_many))
    print(result, today)

def W(filename):
    TimeDelta()
    data = #in example

    data['Last check']= pd.to_datetime(data['Last check'], format='%m/%d/%Y')
    print(result < data['Last check'] < today )

错误

3/12/2020
3/1/2020

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

尝试.loc []

sub_data = data.loc[(data['Last check'] > result) and (data['Last check'] < today)]

文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html

答案 1 :(得分:0)

第一个错误是您创建DataFrame的方式。 您的代码的结果是最后检查列为 object 类型(实际上是 string )。要确认这一点,请运行df.info()

但是您想比较日期,因此此列应尽可能 日期类型。

请注意,熊猫具有其自己的内置日期时间和timedelta类型, 即 datetime64 Timedelta ,因此您无需使用 datetime 包。

要创建您的DataFrame,请运行:

df = pd.DataFrame(data, dtype='datetime64[ns]')

为了使用 pandasonic 自己的 Timedelta 类型,请更改 您的 TimeDelta 函数可以:

def TimeDelta():
    global result, today
    today = pd.Timestamp.today().normalize()
    how_many = input("How many days: ")
    result = today - pd.Timedelta(how_many + 'D')
    print(result, today)

并在正确的日期范围内通过最后检查打印 df 行, 运行:

print(df[df['Last check'].between(result, today)])

最后一个细节:由于您使用正确的列类型创建了 df ,因此删除

data['Last check']= pd.to_datetime(data['Last check'], format='%m/%d/%Y')
W 函数中的

指令。