def weather_update(self): three_day_flights = self.schedule[ self.schedule['Arrival datatime'] - Timestamp.today() < Timedelta('3 days')] three_day_flights = three_day_flights[ three_day_flights['Departure datatime'] - Timestamp.today() > Timedelta('3:00:00')].index for i in three_day_flights: # print('%2d from %d, event_list: %d' %(i, len(three_day_flights), len(self.event_list)), end='\r') flight = self.schedule.loc[i] for stuff in ['Departure ', 'Arrival ']: forecast = self.forecasts[flight[stuff + 'port']] weather = forecast.get_weather_at(flight[stuff + 'datatime']) snow = weather.get_snow().get('3h', 0) if snow > 3: # Attention! Magic numbers! e = self.create_event(flight[stuff + 'port'], flight[stuff + 'datatime'], 'snow', snow) print('new snow event ', snow, ' ', len(e.flights_affected), ' ', e.datetime_happened) wind = weather.get_wind().get('speed', 0) if wind > 7: # Attention! Magic numbers! e = self.create_event(flight[stuff + 'port'], flight[stuff + 'datatime'], 'strong wind', wind) print('new wind event ', wind, ' ', len(e.flights_affected), ' ', e.datetime_happened)
def _evaluate_with_timedelta_like(self, other, op): if isinstance(other, ABCSeries): # GH#19042 return NotImplemented opstr = '__{opname}__'.format(opname=op.__name__).replace('__r', '__') # allow division by a timedelta if opstr in ['__div__', '__truediv__', '__floordiv__']: if _is_convertible_to_td(other): other = Timedelta(other) if isna(other): raise NotImplementedError( "division by pd.NaT not implemented") i8 = self.asi8 left, right = i8, other.value if opstr in ['__floordiv__']: result = op(left, right) else: result = op(left, np.float64(right)) result = self._maybe_mask_results(result, convert='float64') return result return NotImplemented
class TestIndexArithmeticWithTimedeltaScalar(object): @pytest.mark.parametrize('index', [ Int64Index(range(1, 11)), UInt64Index(range(1, 11)), Float64Index(range(1, 11)), RangeIndex(1, 11) ]) @pytest.mark.parametrize('scalar_td', [ Timedelta(days=1), Timedelta(days=1).to_timedelta64(), Timedelta(days=1).to_pytimedelta() ]) def test_index_mul_timedelta(self, scalar_td, index): # GH#19333 expected = pd.timedelta_range('1 days', '10 days') result = index * scalar_td tm.assert_index_equal(result, expected) commute = scalar_td * index tm.assert_index_equal(commute, expected) @pytest.mark.parametrize('index', [ Int64Index(range(1, 3)), UInt64Index(range(1, 3)), Float64Index(range(1, 3)), RangeIndex(1, 3) ]) @pytest.mark.parametrize('scalar_td', [ Timedelta(days=1), Timedelta(days=1).to_timedelta64(), Timedelta(days=1).to_pytimedelta() ]) def test_index_rdiv_timedelta(self, scalar_td, index): expected = pd.TimedeltaIndex(['1 Day', '12 Hours']) result = scalar_td / index tm.assert_index_equal(result, expected) with pytest.raises(TypeError): index / scalar_td
def to_offset(freq): """ Return DateOffset object from string or tuple representation or datetime.timedelta object Parameters ---------- freq : str, tuple, datetime.timedelta, DateOffset or None Returns ------- delta : DateOffset None if freq is None Raises ------ ValueError If freq is an invalid frequency See Also -------- pandas.DateOffset Examples -------- >>> to_offset('5min') <5 * Minutes> >>> to_offset('1D1H') <25 * Hours> >>> to_offset(('W', 2)) <2 * Weeks: weekday=6> >>> to_offset((2, 'B')) <2 * BusinessDays> >>> to_offset(datetime.timedelta(days=1)) <Day> >>> to_offset(Hour()) <Hour> """ if freq is None: return None if isinstance(freq, DateOffset): return freq if isinstance(freq, tuple): name = freq[0] stride = freq[1] if isinstance(stride, compat.string_types): name, stride = stride, name name, _ = _base_and_stride(name) delta = get_offset(name) * stride elif isinstance(freq, timedelta): delta = None freq = Timedelta(freq) try: for name in freq.components._fields: offset = _name_to_offset_map[name] stride = getattr(freq.components, name) if stride != 0: offset = stride * offset if delta is None: delta = offset else: delta = delta + offset except Exception: raise ValueError(_INVALID_FREQ_ERROR.format(freq)) else: delta = None stride_sign = None try: splitted = re.split(opattern, freq) if splitted[-1] != '' and not splitted[-1].isspace(): # the last element must be blank raise ValueError('last element must be blank') for sep, stride, name in zip(splitted[0::4], splitted[1::4], splitted[2::4]): if sep != '' and not sep.isspace(): raise ValueError('separator must be spaces') prefix = _lite_rule_alias.get(name) or name if stride_sign is None: stride_sign = -1 if stride.startswith('-') else 1 if not stride: stride = 1 if prefix in Resolution._reso_str_bump_map.keys(): stride, name = Resolution.get_stride_from_decimal( float(stride), prefix ) stride = int(stride) offset = get_offset(name) offset = offset * int(np.fabs(stride) * stride_sign) if delta is None: delta = offset else: delta = delta + offset except Exception: raise ValueError(_INVALID_FREQ_ERROR.format(freq)) if delta is None: raise ValueError(_INVALID_FREQ_ERROR.format(freq)) return delta
def _box_func(self): return lambda x: Timedelta(x, unit='ns')