我有以下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
有什么想法吗?谢谢!
答案 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 函数中的指令。