簡體   English   中英

顯示今天和過去一天之間的日期

[英]Display the dates between today and a day in the past

我有以下 df:

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

我試圖存檔的是僅顯示先前計算的今天和過去一天之間的日期/日期。

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 )

因此,如果今天是 2020-03-27 並且 timedelta 設置為 26 天前(2020-03-01),則輸出應為:

3/12/2020
3/1/2020

錯誤

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

有任何想法嗎? 謝謝!

試試 .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

第一個錯誤在於您創建 DataFrame 的方式。 您的代碼的結果是Last check列是對象類型(實際上是string )。 要確認這一點,請運行df.info()

但是您想比較日期,因此該列應該是任何可能的日期類型。

還要注意Pandas自己內置的 datetime 和 timedelta 類型,即datetime64Timedelta ,所以你不需要使用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)

並在正確的日期范圍內打印帶有Last check 的df行,運行:

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

最后一個細節:由於您使用正確的列類型創建了df ,因此請刪除

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

來自W函數的指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM