如何使用Pandas删除2018年5月1日之前的指定数据行?
日期筛选与多条件数据删除方案
需求:删除2018年5月1日之前的数据行,已完成日期格式转换:
df['DATE'] = pd.to_datetime(df['DATE'],format='%d/%m/%Y')
问题1
如何设置截止日期为2018-04-30?
问题2
需结合多条件删除数据,现有部分代码如下,如何补充日期条件?
df2 = df[(df['REFERENCE'].str.contains("ABC") & (df['COUNTRY'] == 'countryname') & <<how can i mention the cut off date and the actual date column that has all dates?) == False]
解决方案
方法1:直接删除目标行
通过drop()方法定位并删除符合条件的数据:
# 删除包含指定前缀、指定国家且日期早于/等于2018-05-01的数据 raw_df.drop(raw_df[raw_df['REFERENCE'].str.contains("prefix") & (raw_df['COUNTRY'] == 'countryname') & (raw_df['DATE'].le('2018-05-01'))].index, inplace = True)
- 若要保留2018-05-01及之后的数据,将
.le()(小于等于)替换为.ge()(大于等于) - 针对问题1的2018-04-30截止需求,只需把日期参数改为
'2018-04-30',使用.le('2018-04-30')即可筛选并删除该日期及之前的行
方法2:筛选保留有效行(适配问题2代码)
给现有代码补充日期条件,通过取反筛选出需要保留的数据:
# 保留不满足「含ABC+指定国家+日期早于2018-05-01」组合条件的数据 df2 = df[~(df['REFERENCE'].str.contains("ABC") & (df['COUNTRY'] == 'countryname') & (df['DATE'] < '2018-05-01'))]
- 若以2018-04-30为截止,将日期条件改为
df['DATE'] <= '2018-04-30' ~符号等价于原代码中的== False,写法更简洁直观
内容的提问来源于stack exchange,提问作者Ziggy
相关产品推荐
相关产品推荐

