【问题标题】:Compare date with datetime64[ns] - Pandas将日期与 datetime64[ns] 进行比较 - Pandas
【发布时间】:2020-03-29 03:57:17
【问题描述】:

晚上好,

我需要显示在今天和过去给定日期之间的日期。这是代码。

import pandas as pd
from datetime import datetime,timedelta


df = pd.DataFrame({'DateOFBirth': ['28/03/2020','2/03/2020','12/02/2021']})
df['DateOFBirth'] = pd.to_datetime(df['DateOFBirth'],format='%d/%m/%Y')

print(df.dtypes)
print(df)

x = input ("No of days: ")
today = datetime.date(datetime.now())
result = today - timedelta(days=int(x))

#np.datetime(result).astype(datetime64)
print(result < df['DateOFBirth'] < today)

我尝试将 date 转换为 datetime64[ns] ,反之亦然,但我没有运气。使最后一个 print() 语句起作用的任何解决方案?谢谢!

示例输出: 如果今天是 28.03.2020 并且 x 设置为 30 天,则输出应为:

28/03/2020
2/03/2020

【问题讨论】:

  • 你能添加一个示例输出吗?

标签: python-3.x pandas


【解决方案1】:

你也可以使用between

import pandas as pd
from datetime import datetime,timedelta


df = pd.DataFrame({'DateOFBirth': ['28/03/2020','2/03/2020','12/02/2021']})
df['DateOFBirth'] = pd.to_datetime(df['DateOFBirth'],format='%d/%m/%Y')

x = input ("No of days: ")
today = pd.to_datetime(datetime.now())
result = today - timedelta(days=int(x))
bw_values = df[df['DateOFBirth'].between(result, today, inclusive=False)]

# output if x = 30
print(bw_values)
  DateOFBirth
0  2020-03-28
1  2020-03-02

或者你也可以使用Query

bw_values = df.query('@result < DateOFBirth < @today')

【讨论】:

    【解决方案2】:

    您也可以用pd.to_datetime() 计算today,以获得相同的日期格式:

    today = pd.to_datetime(datetime.now())
    

    由于您将整列与单个数字进行比较,可能会出现另一个错误:

    print(result < df['DateOFBirth'] < today)
    

    你可以用这一行来计算你想要的输出:

    mask = (df['DateOFBirth'] > result) & (df['DateOFBirth'] <= today)
    print(df.loc[mask])
    

    结果将是:

        DateOFBirth
    0   2020-03-28
    1   2020-03-02
    

    【讨论】:

    • 如果我想显示结果而不是 bool 值,我应该怎么做? print(mask) 返回一个布尔值
    • 可以打印df.loc[mask]
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2023-02-07
    • 2020-08-20
    • 2019-01-20
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多