使用DatetimeIndex标签列表进行Pandas切片失败问题咨询
解决Pandas DataFrame的DatetimeIndex切片问题
我来帮你搞定这个时间索引切片的问题!你之前的代码有两个核心问题:一是pd.date_range语句没写完,二是没有把生成的日期序列设置为DataFrame的索引,这才导致用DatetimeIndex切片失败。下面一步步修正并演示正确操作:
第一步:补全代码并设置DatetimeIndex
首先我们要完整生成2017年的月度日期序列,然后把它绑定为DataFrame的索引,这样数据就有了可用于时间切片的标签:
import pandas as pd # 初始化气温数据 tavg = pd.Series([55.8, 57.2, 61.0, 63.6, 63.3, 66.7, 71.7, 72.0, 71.5, 71.5, 65.6, 61.4]) tmax = pd.Series([62.7, 62.6, 69.3, 71.9, 69.4, 72.6, 77.5, 77.3, 78.5, 80.4, 73.7, 72.4]) tmin = pd.Series([48.8, 51.8, 52.8, 55.4, 57.1, 60.9, 65.8, 66.8, 64.6, 62.5, 57.3, 50.3]) # 创建DataFrame并直接指定时间索引(更简洁的写法) dates = pd.date_range(start='2017-01-01', periods=12, freq='M') # freq='M'表示每月最后一天 temp_df = pd.DataFrame({ 'TAVG': tavg, 'TMIN': tmin, 'TMAX': tmax }, index=dates)
此时查看temp_df,每行都会对应2017年的月度日期索引:
TAVG TMIN TMAX 2017-01-31 55.8 48.8 62.7 2017-02-28 57.2 51.8 62.6 ... 2017-12-31 61.4 50.3 72.4
第二步:用DatetimeIndex进行切片操作
现在可以用多种方式对时间序列做切片,举几个常用场景:
1. 按日期范围快速切片
# 获取2017年春季度(3-5月)的数据 spring_data = temp_df['2017-03':'2017-05'] print(spring_data)
2. 按月份/年份筛选
# 获取所有7月份的数据(这里仅2017年7月) july_data = temp_df[temp_df.index.month == 7] # 获取2017年下半年(7-12月)的数据 second_half = temp_df['2017-07':'2017-12']
3. 用loc精确获取单行/多行
# 获取2017年8月的气温数据 august_data = temp_df.loc['2017-08-31']
为什么之前切片失败?
原代码仅生成了dates变量,但没有把它赋值给temp_df.index,所以DataFrame默认使用的是0-11的整数索引,自然无法识别Datetime格式的切片条件啦。
内容的提问来源于stack exchange,提问作者N1B4
相关产品推荐
相关产品推荐

