Python:移除当前年月之前的DataFrame数据行
过滤DataFrame中早于当前年月的船舶到港记录
这里给你两种可行的解决方案,对应你手头的两种数据格式:
利用完整日期列处理
如果你的数据有格式为%d/%b/%Y的日期列,可以按以下步骤操作:
- 先把字符串日期转成pandas的datetime类型,方便后续年月比较
- 取当前年月的第一天作为过滤阈值(比如当前是2022年1月,阈值就是2022-01-01)
- 保留到港日期所在年月不早于当前年月的记录
import pandas as pd from datetime import datetime # 模拟你的船舶数据 data = { '到港日期': ['15/Dec/2021', '02/Jan/2022', '20/Jan/2022', '30/Nov/2021'], '船舶名称': ['船A', '船B', '船C', '船D'] } df = pd.DataFrame(data) # 1. 转换日期列格式 df['到港日期'] = pd.to_datetime(df['到港日期'], format='%d/%b/%Y') # 2. 获取当前年月的起始日期(自动识别系统当前时间) current_year_month = datetime.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0) # 3. 过滤数据:移除早于当前年月的记录 filtered_df = df[df['到港日期'] >= current_year_month] print(filtered_df)
利用单独的年份、月份列处理
如果数据已经拆分出单独的年份和月份列,直接通过条件判断过滤更高效:
- 获取当前系统的年份和月份
- 排除两类记录:年份小于当前年的,或者年份等于当前年但月份小于当前月的
import pandas as pd from datetime import datetime # 模拟带单独年月列的船舶数据 data = { '年份': [2021, 2022, 2022, 2021], '月份': [12, 1, 2, 11], '船舶名称': ['船A', '船B', '船C', '船D'] } df = pd.DataFrame(data) # 1. 获取当前年和月 current_year = datetime.now().year current_month = datetime.now().month # 2. 过滤条件:保留符合要求的记录 filtered_df = df[ (df['年份'] > current_year) | ((df['年份'] == current_year) & (df['月份'] >= current_month)) ] print(filtered_df)
两种方法都能实现你的需求:比如当前是2022年1月1日时,2021年12月及更早的记录会被自动移除。
内容的提问来源于stack exchange,提问作者Fernando Martins
相关产品推荐
相关产品推荐

