Pandas中筛选日期索引时忽略日属性的简洁语法是什么?
解决DatetimeIndex按年月筛选的简洁写法
你用df[df.index=='2016-01']返回空的原因是:你的索引是精确到日的Datetime类型,直接比较'2016-01'时,Pandas会自动将其解析为'2016-01-01 00:00:00',只有索引恰好是这一天的行才会被匹配,自然拿不到整个1月的数据。
下面是几种简洁的、忽略日属性的筛选方法:
最简洁的索引切片法:Pandas的DatetimeIndex原生支持部分日期字符串的索引,直接写年月就能选中整个月的所有行:
df.loc['2016-01']这种写法完全符合你想要的类似
'2016-01-*'的通配符效果,甚至还支持更灵活的范围,比如df.loc['2016-01':'2016-03']可直接选中一季度数据。字符串格式化匹配:把DatetimeIndex转成
YYYY-MM格式的字符串再做等值比较:df[df.index.strftime('%Y-%m') == '2016-01']这种写法扩展性强,比如要匹配特定季度可以转成
'%Y-Q%q',或者自定义其他日期格式。直接访问日期属性:利用DatetimeIndex的
year和month属性做组合筛选:df[(df.index.year == 2016) & (df.index.month == 1)]适合需要同时筛选年、月、日等多个维度的场景,逻辑直观。
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

