熊猫数据帧根据属性删除行



我有一个带有日期对象的熊猫数据帧。我想删除具有某些年份和月份的行,比如说二月。Pythonic 的方法是什么?

df = pd.DataFrame(['2020-01-01','2020-02-02','2020-03-03','2020-04-04'],columns=['dates'])
df['dates'] = pd.to_datetime(df['dates']).dt.date

这似乎太多了,留下了一个 NaN 值。

df["dates"] = pd.Series([date for date in df["dates"].values if date.month!=2]
dates
0  2020-01-01
1  2020-03-03
2  2020-04-04
3         NaN

如果我尝试访问系列中所有对象的属性,则会出现错误。

df = df.drop(df[df.dates.month==2].index)
AttributeError: 'Series' object has no attribute 'month'

与范围进行比较似乎打字太多,我不知道如何组合条件。

df = df.drop(df[df.dates >= pd.to_datetime('2020-02-01') and df.dates < pd.to_datetime('2020-03-01')].index)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

使用dt访问器,但它要求列的类型为pd.Timestamp

df = pd.DataFrame(['2020-01-01','2020-02-02','2020-03-03','2020-04-04'],columns=['dates'])
df['dates'] = pd.to_datetime(df['dates']) # removed the .dt.date
# Remove rows whose month are Feb, Mar or Apr, in 2018 & 2019 only
df[~(df['dates'].dt.month.isin([2,3,4]) & df['dates'].dt.month.isin(2018, 2019))]

最新更新