2017-07-27 64 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 –

相關問題