2017-07-27 28 views
0

给出一个df这样的:如何通过月份和年份输入过滤带日期时间索引的数据框?熊猫

df=pd.read_csv(PATH + 'Matriz3_fechas.csv',index_col='Fecha',skiprows=0) 
df.index = pd.DatetimeIndex(df.index) 

注意,出生日期是已经与日期时间格式

Fecha    D576972dc305aa D576972dc32e9a D576972dc3590a \ 

2016-06-01 00:00:00   0.0   0.0    0.1 \ 
2016-07-01 00:05:00   0.0   0.0    0.1 \ 
2017-05-01 00:10:00   0.0   0.0    0.1 \ 
2017-05-01 00:15:00   0.0   0.0    0.1 \                
2017-07-01 00:20:00   0.0   0.0    0.1 \ 

从来就试图通过月份和年份过滤指数**:

df=df[(df.index.month==5)&(matriz.index.year==2017)] 

但它不会过滤df得到:(想要的结果)

Fecha    D576972dc305aa D576972dc32e9a D576972dc3590a \ 

2017-05-01 00:10:00   0.0   0.0    0.1 \ 
2017-05-01 00:15:00   0.0   0.0    0.1 \ 

回答

1

您可以使用partial string indexing

#for datetimeindex use parameter parse_dates 
df=pd.read_csv(PATH+'Matriz3_fechas.csv',index_col='Fecha',skiprows=0,parse_dates=['Fecha']) 

print (df.index) 
DatetimeIndex(['2016-06-01 00:00:00', '2016-07-01 00:05:00', 
       '2017-05-01 00:10:00', '2017-05-01 00:15:00', 
       '2017-07-01 00:20:00'], 
       dtype='datetime64[ns]', name='Fecha', freq=None) 


df = df.loc['2017-05'] 
print (df) 
        D576972dc305aa D576972dc32e9a D576972dc3590a 
Fecha                
2017-05-01 00:10:00    0.0    0.0    0.1 
2017-05-01 00:15:00    0.0    0.0    0.1 

但您的解决方案中也可以(如果matrizdf,我认为错字):

df=df[(df.index.month==5)&(df.index.year==2017)] 
print (df) 
        D576972dc305aa D576972dc32e9a D576972dc3590a 
Fecha                
2017-05-01 00:10:00    0.0    0.0    0.1 
2017-05-01 00:15:00    0.0    0.0    0.1 
+1

它是如此简单 – Dark

+0

所以'打印(DF .index)'返回'DatetimeIndex'?几个月没有交换? – jezrael

+0

我曾尝试过,但输出的形状我得到它[0行x 3列]而不是[2行x 3列] @jezrael –

相关问题