test_block_internals.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. # Segregated collection of methods that require the BlockManager internal data
  4. # structure
  5. class TestSeriesBlockInternals(object):
  6. def test_setitem_invalidates_datetime_index_freq(self):
  7. # GH#24096 altering a datetime64tz Series inplace invalidates the
  8. # `freq` attribute on the underlying DatetimeIndex
  9. dti = pd.date_range('20130101', periods=3, tz='US/Eastern')
  10. ts = dti[1]
  11. ser = pd.Series(dti)
  12. assert ser._values is not dti
  13. assert ser._values._data.base is not dti._data._data.base
  14. assert dti.freq == 'D'
  15. ser.iloc[1] = pd.NaT
  16. assert ser._values.freq is None
  17. # check that the DatetimeIndex was not altered in place
  18. assert ser._values is not dti
  19. assert ser._values._data.base is not dti._data._data.base
  20. assert dti[1] == ts
  21. assert dti.freq == 'D'
  22. def test_dt64tz_setitem_does_not_mutate_dti(self):
  23. # GH#21907, GH#24096
  24. dti = pd.date_range('2016-01-01', periods=10, tz='US/Pacific')
  25. ts = dti[0]
  26. ser = pd.Series(dti)
  27. assert ser._values is not dti
  28. assert ser._values._data.base is not dti._data._data.base
  29. assert ser._data.blocks[0].values is not dti
  30. assert (ser._data.blocks[0].values._data.base
  31. is not dti._data._data.base)
  32. ser[::3] = pd.NaT
  33. assert ser[0] is pd.NaT
  34. assert dti[0] == ts