Python如何筛选包含特定年月的DataFrame列?
没问题,这在pandas里有几种实用的实现方式,我给你逐一说明:
方法一:通过日期类型转换筛选(最稳妥,推荐)
这种方法不依赖列名的字符串格式,只要pandas能识别列名为日期就可以准确筛选,完全避免字符串匹配的歧义问题。
import pandas as pd # 假设你的DataFrame名为df # 先把所有列名尝试转换为datetime类型,非日期列会被转为NaT(Not a Time) date_columns = pd.to_datetime(df.columns, errors='coerce') # 构建筛选条件:年份为2021且月份为7,同时保留所有非日期列(把NaT的位置设为True) filter_mask = (date_columns.dt.year == 2021) & (date_columns.dt.month == 7) filter_mask = filter_mask.fillna(True) # 应用筛选得到结果 filtered_df = df.loc[:, filter_mask]
方法二:字符串匹配筛选(适合列名格式固定的场景)
如果你的日期列名严格遵循MM/DD/YYYY格式,可以直接通过字符串操作来筛选:
# 先定义需要保留的非日期列 non_date_cols = ['State_Name', 'City_Name', 'ID1', 'ID2'] # 筛选2021年7月的日期列:列名以/2021结尾,且拆分后的第一个部分是月份"7" july_2021_cols = [col for col in df.columns if col.endswith('/2021') and col.split('/')[0] == '7'] # 合并列并筛选 filtered_df = df[non_date_cols + july_2021_cols]
注意:如果你的月份是两位格式(比如
07/1/2021),记得把判断条件改成col.split('/')[0] == '07'。
方法三:正则表达式快速筛选
用df.filter()结合正则表达式可以一步完成,适合熟悉正则的同学:
# 正则规则:匹配非日期列,或者2021年7月的日期列(支持7或07开头的月份格式) filtered_df = df.filter(regex=r'(State_Name|City_Name|ID1|ID2|^\d?7/\d+/2021$)')
以上几种方法都能帮你精准提取2021年7月的所有数据列,根据你的实际场景选就行~
内容的提问来源于stack exchange,提问作者DPatrick
相关产品推荐
相关产品推荐

