我有一個pandas資料框架,想洗掉所有起始日期小于2019年且大于2020年的記錄。可以肯定的是,我可以直接對其進行迭代,執行條件,如果是假的,就通過索引將其洗掉。例如,像下面這樣:
for index, row in df.iterrows():
#從日期格式YYYY-MM-DD中提取年份。
year = int(row['START_DATE'][:4] )
# 洗掉2019/2020年之前和之后的所有日期。
if not (year >= 2019 and year <= 2020) 。
df = df.drop(index)
但我的目標是更有效地撰寫代碼。而這正是我被卡住的地方。我看到了下面這一行:
df = df.drop(df[(int(df. START_DATE[:4]) < 2019) & (int(df. START_DATE[:4]) > 2020)].index)
但是我得到一個TypeError: cannot convert the series to <class 'int' >并且不知道如何在這個簡短的陳述句中把值轉換成int。
uj5u.com熱心網友回復:
使用pd.to_datetime來檢查日期是否在你的范圍內,然后提取年份:
>>> df
START_DATE VAL
0 2018-12-31 1
1 2019-12-31 2
2 2020-12-31 3
3 2021-12-31 4
>>> df.loc[pd.to_datetime(df['START_DATE']).between('2019', '2021')]
.assign(START_DATE=df['START_DATE'].str[:4].astype(int))
START_DATE VAL
1 2019 2
2 2020 3
uj5u.com熱心網友回復:
首先確保START_DATE列是在pd.datetime。然后通過你的條件過濾它們。~在Pandas中是一個NOT操作。
df["START_DATE"/span>] = pd.to_datetime(df["START_DATE"/span>)
df = df[~((df["START_DATE"].dt.year < 2019) | (df["START_DATE"].dt.year > 2020) )]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323844.html
標籤:
