[英]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 類型,即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)
並在正確的日期范圍內打印帶有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.