@@ -1473,7 +1473,7 @@ def test_timestamp_fields(self):
1473
1473
# extra fields from DatetimeIndex like quarter and week
1474
1474
idx = tm .makeDateIndex (100 )
1475
1475
1476
- fields = ['dayofweek' , 'dayofyear' , 'week' , 'weekofyear' , 'quarter' ]
1476
+ fields = ['dayofweek' , 'dayofyear' , 'week' , 'weekofyear' , 'quarter' , 'is_month_start' , 'is_month_end' , 'is_quarter_start' , 'is_quarter_end' , 'is_year_start' , 'is_year_end' ]
1477
1477
for f in fields :
1478
1478
expected = getattr (idx , f )[- 1 ]
1479
1479
result = getattr (Timestamp (idx [- 1 ]), f )
@@ -2192,7 +2192,7 @@ def test_join_with_period_index(self):
2192
2192
2193
2193
class TestDatetime64 (tm .TestCase ):
2194
2194
"""
2195
- Also test supoprt for datetime64[ns] in Series / DataFrame
2195
+ Also test support for datetime64[ns] in Series / DataFrame
2196
2196
"""
2197
2197
2198
2198
def setUp (self ):
@@ -2202,37 +2202,115 @@ def setUp(self):
2202
2202
2203
2203
def test_datetimeindex_accessors (self ):
2204
2204
dti = DatetimeIndex (
2205
- freq = 'Q-JAN ' , start = datetime (1997 , 12 , 31 ), periods = 100 )
2205
+ freq = 'D ' , start = datetime (1998 , 1 , 1 ), periods = 365 )
2206
2206
2207
2207
self .assertEquals (dti .year [0 ], 1998 )
2208
2208
self .assertEquals (dti .month [0 ], 1 )
2209
- self .assertEquals (dti .day [0 ], 31 )
2209
+ self .assertEquals (dti .day [0 ], 1 )
2210
2210
self .assertEquals (dti .hour [0 ], 0 )
2211
2211
self .assertEquals (dti .minute [0 ], 0 )
2212
2212
self .assertEquals (dti .second [0 ], 0 )
2213
2213
self .assertEquals (dti .microsecond [0 ], 0 )
2214
- self .assertEquals (dti .dayofweek [0 ], 5 )
2214
+ self .assertEquals (dti .dayofweek [0 ], 3 )
2215
2215
2216
- self .assertEquals (dti .dayofyear [0 ], 31 )
2217
- self .assertEquals (dti .dayofyear [1 ], 120 )
2216
+ self .assertEquals (dti .dayofyear [0 ], 1 )
2217
+ self .assertEquals (dti .dayofyear [120 ], 121 )
2218
2218
2219
- self .assertEquals (dti .weekofyear [0 ], 5 )
2220
- self .assertEquals (dti .weekofyear [1 ], 18 )
2219
+ self .assertEquals (dti .weekofyear [0 ], 1 )
2220
+ self .assertEquals (dti .weekofyear [120 ], 18 )
2221
2221
2222
2222
self .assertEquals (dti .quarter [0 ], 1 )
2223
- self .assertEquals (dti .quarter [1 ], 2 )
2224
-
2225
- self .assertEquals (len (dti .year ), 100 )
2226
- self .assertEquals (len (dti .month ), 100 )
2227
- self .assertEquals (len (dti .day ), 100 )
2228
- self .assertEquals (len (dti .hour ), 100 )
2229
- self .assertEquals (len (dti .minute ), 100 )
2230
- self .assertEquals (len (dti .second ), 100 )
2231
- self .assertEquals (len (dti .microsecond ), 100 )
2232
- self .assertEquals (len (dti .dayofweek ), 100 )
2233
- self .assertEquals (len (dti .dayofyear ), 100 )
2234
- self .assertEquals (len (dti .weekofyear ), 100 )
2235
- self .assertEquals (len (dti .quarter ), 100 )
2223
+ self .assertEquals (dti .quarter [120 ], 2 )
2224
+
2225
+ self .assertEquals (dti .is_month_start [0 ], True )
2226
+ self .assertEquals (dti .is_month_start [1 ], False )
2227
+ self .assertEquals (dti .is_month_start [31 ], True )
2228
+ self .assertEquals (dti .is_quarter_start [0 ], True )
2229
+ self .assertEquals (dti .is_quarter_start [90 ], True )
2230
+ self .assertEquals (dti .is_year_start [0 ], True )
2231
+ self .assertEquals (dti .is_year_start [364 ], False )
2232
+ self .assertEquals (dti .is_month_end [0 ], False )
2233
+ self .assertEquals (dti .is_month_end [30 ], True )
2234
+ self .assertEquals (dti .is_month_end [31 ], False )
2235
+ self .assertEquals (dti .is_month_end [364 ], True )
2236
+ self .assertEquals (dti .is_quarter_end [0 ], False )
2237
+ self .assertEquals (dti .is_quarter_end [30 ], False )
2238
+ self .assertEquals (dti .is_quarter_end [89 ], True )
2239
+ self .assertEquals (dti .is_quarter_end [364 ], True )
2240
+ self .assertEquals (dti .is_year_end [0 ], False )
2241
+ self .assertEquals (dti .is_year_end [364 ], True )
2242
+
2243
+ self .assertEquals (len (dti .year ), 365 )
2244
+ self .assertEquals (len (dti .month ), 365 )
2245
+ self .assertEquals (len (dti .day ), 365 )
2246
+ self .assertEquals (len (dti .hour ), 365 )
2247
+ self .assertEquals (len (dti .minute ), 365 )
2248
+ self .assertEquals (len (dti .second ), 365 )
2249
+ self .assertEquals (len (dti .microsecond ), 365 )
2250
+ self .assertEquals (len (dti .dayofweek ), 365 )
2251
+ self .assertEquals (len (dti .dayofyear ), 365 )
2252
+ self .assertEquals (len (dti .weekofyear ), 365 )
2253
+ self .assertEquals (len (dti .quarter ), 365 )
2254
+ self .assertEquals (len (dti .is_month_start ), 365 )
2255
+ self .assertEquals (len (dti .is_month_end ), 365 )
2256
+ self .assertEquals (len (dti .is_quarter_start ), 365 )
2257
+ self .assertEquals (len (dti .is_quarter_end ), 365 )
2258
+ self .assertEquals (len (dti .is_year_start ), 365 )
2259
+ self .assertEquals (len (dti .is_year_end ), 365 )
2260
+
2261
+ dti = DatetimeIndex (
2262
+ freq = 'BQ-FEB' , start = datetime (1998 , 1 , 1 ), periods = 4 )
2263
+
2264
+ self .assertEquals (sum (dti .is_quarter_start ), 0 )
2265
+ self .assertEquals (sum (dti .is_quarter_end ), 4 )
2266
+ self .assertEquals (sum (dti .is_year_start ), 0 )
2267
+ self .assertEquals (sum (dti .is_year_end ), 1 )
2268
+
2269
+ # Ensure is_start/end accessors throw ValueError for CustomBusinessDay, CBD requires np >= 1.7
2270
+ if not _np_version_under1p7 :
2271
+ bday_egypt = offsets .CustomBusinessDay (weekmask = 'Sun Mon Tue Wed Thu' )
2272
+ dti = date_range (datetime (2013 , 4 , 30 ), periods = 5 , freq = bday_egypt )
2273
+ self .assertRaises (ValueError , lambda : dti .is_month_start )
2274
+
2275
+ dti = DatetimeIndex (['2000-01-01' , '2000-01-02' , '2000-01-03' ])
2276
+
2277
+ self .assertEquals (dti .is_month_start [0 ], 1 )
2278
+
2279
+ tests = [
2280
+ (Timestamp ('2013-06-01' , offset = 'M' ).is_month_start , 1 ),
2281
+ (Timestamp ('2013-06-01' , offset = 'BM' ).is_month_start , 0 ),
2282
+ (Timestamp ('2013-06-03' , offset = 'M' ).is_month_start , 0 ),
2283
+ (Timestamp ('2013-06-03' , offset = 'BM' ).is_month_start , 1 ),
2284
+ (Timestamp ('2013-02-28' , offset = 'Q-FEB' ).is_month_end , 1 ),
2285
+ (Timestamp ('2013-02-28' , offset = 'Q-FEB' ).is_quarter_end , 1 ),
2286
+ (Timestamp ('2013-02-28' , offset = 'Q-FEB' ).is_year_end , 1 ),
2287
+ (Timestamp ('2013-03-01' , offset = 'Q-FEB' ).is_month_start , 1 ),
2288
+ (Timestamp ('2013-03-01' , offset = 'Q-FEB' ).is_quarter_start , 1 ),
2289
+ (Timestamp ('2013-03-01' , offset = 'Q-FEB' ).is_year_start , 1 ),
2290
+ (Timestamp ('2013-03-31' , offset = 'QS-FEB' ).is_month_end , 1 ),
2291
+ (Timestamp ('2013-03-31' , offset = 'QS-FEB' ).is_quarter_end , 0 ),
2292
+ (Timestamp ('2013-03-31' , offset = 'QS-FEB' ).is_year_end , 0 ),
2293
+ (Timestamp ('2013-02-01' , offset = 'QS-FEB' ).is_month_start , 1 ),
2294
+ (Timestamp ('2013-02-01' , offset = 'QS-FEB' ).is_quarter_start , 1 ),
2295
+ (Timestamp ('2013-02-01' , offset = 'QS-FEB' ).is_year_start , 1 ),
2296
+ (Timestamp ('2013-06-30' , offset = 'BQ' ).is_month_end , 0 ),
2297
+ (Timestamp ('2013-06-30' , offset = 'BQ' ).is_quarter_end , 0 ),
2298
+ (Timestamp ('2013-06-30' , offset = 'BQ' ).is_year_end , 0 ),
2299
+ (Timestamp ('2013-06-28' , offset = 'BQ' ).is_month_end , 1 ),
2300
+ (Timestamp ('2013-06-28' , offset = 'BQ' ).is_quarter_end , 1 ),
2301
+ (Timestamp ('2013-06-28' , offset = 'BQ' ).is_year_end , 0 ),
2302
+ (Timestamp ('2013-06-30' , offset = 'BQS-APR' ).is_month_end , 0 ),
2303
+ (Timestamp ('2013-06-30' , offset = 'BQS-APR' ).is_quarter_end , 0 ),
2304
+ (Timestamp ('2013-06-30' , offset = 'BQS-APR' ).is_year_end , 0 ),
2305
+ (Timestamp ('2013-06-28' , offset = 'BQS-APR' ).is_month_end , 1 ),
2306
+ (Timestamp ('2013-06-28' , offset = 'BQS-APR' ).is_quarter_end , 1 ),
2307
+ (Timestamp ('2013-03-29' , offset = 'BQS-APR' ).is_year_end , 1 ),
2308
+ (Timestamp ('2013-11-01' , offset = 'AS-NOV' ).is_year_start , 1 ),
2309
+ (Timestamp ('2013-10-31' , offset = 'AS-NOV' ).is_year_end , 1 )]
2310
+
2311
+ for ts , value in tests :
2312
+ self .assertEquals (ts , value )
2313
+
2236
2314
2237
2315
def test_nanosecond_field (self ):
2238
2316
dti = DatetimeIndex (np .arange (10 ))
0 commit comments