如何在Jupyter中移除DataFrame中2020年2月29日的所有时间行?
移除DataFrame中2020年2月29日所有行的解决方案
这问题我碰到过好多次啦,原来的条件只精准匹配了当天零点的那一行,自然漏掉了其他时段的数据。下面给你几个靠谱的解决办法,都能一次性移除2020-02-29全天的所有行:
方法1:提取日期部分直接判断
先确保你的时间列是datetime类型(如果不是,先用pd.to_datetime(df['你的时间列名'])转换),然后通过dt.date提取日期部分,再筛选掉目标日期:
import datetime import pandas as pd # 假设你的时间列名为'datetime_col' df = df[df['datetime_col'].dt.date != datetime.date(2020, 2, 29)]
方法2:按年/月/日组合筛选
通过dt.year、dt.month、dt.day分别匹配日期的各个部分,用取反操作排除目标日期:
df = df[~((df['datetime_col'].dt.year == 2020) & (df['datetime_col'].dt.month == 2) & (df['datetime_col'].dt.day == 29))]
这里的~符号表示"取反",也就是保留不满足这三个条件同时成立的行。
方法3:用时间范围排除
生成2020-02-29的起始和结束时间,筛选不在这个区间内的行:
start_date = '2020-02-29' end_date = '2020-03-01' # inclusive='left'表示包含start_date但不包含end_date,刚好覆盖2020-02-29全天 df = df[~df['datetime_col'].between(start_date, end_date, inclusive='left')]
这三种方法都能完美解决你的问题,选哪种看个人习惯就行。如果是大数据集,方法2或3的性能会稍微好一点,但日常使用差别不大~
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

