test_transpose.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import numpy as np
  2. import pytest
  3. import pandas.util._test_decorators as td
  4. from pandas import (
  5. DataFrame,
  6. DatetimeIndex,
  7. IntervalIndex,
  8. date_range,
  9. timedelta_range,
  10. )
  11. import pandas._testing as tm
  12. class TestTranspose:
  13. def test_transpose_td64_intervals(self):
  14. # GH#44917
  15. tdi = timedelta_range("0 Days", "3 Days")
  16. ii = IntervalIndex.from_breaks(tdi)
  17. ii = ii.insert(-1, np.nan)
  18. df = DataFrame(ii)
  19. result = df.T
  20. expected = DataFrame({i: ii[i : i + 1] for i in range(len(ii))})
  21. tm.assert_frame_equal(result, expected)
  22. def test_transpose_empty_preserves_datetimeindex(self):
  23. # GH#41382
  24. df = DataFrame(index=DatetimeIndex([]))
  25. expected = DatetimeIndex([], dtype="datetime64[ns]", freq=None)
  26. result1 = df.T.sum().index
  27. result2 = df.sum(axis=1).index
  28. tm.assert_index_equal(result1, expected)
  29. tm.assert_index_equal(result2, expected)
  30. def test_transpose_tzaware_1col_single_tz(self):
  31. # GH#26825
  32. dti = date_range("2016-04-05 04:30", periods=3, tz="UTC")
  33. df = DataFrame(dti)
  34. assert (df.dtypes == dti.dtype).all()
  35. res = df.T
  36. assert (res.dtypes == dti.dtype).all()
  37. def test_transpose_tzaware_2col_single_tz(self):
  38. # GH#26825
  39. dti = date_range("2016-04-05 04:30", periods=3, tz="UTC")
  40. df3 = DataFrame({"A": dti, "B": dti})
  41. assert (df3.dtypes == dti.dtype).all()
  42. res3 = df3.T
  43. assert (res3.dtypes == dti.dtype).all()
  44. def test_transpose_tzaware_2col_mixed_tz(self):
  45. # GH#26825
  46. dti = date_range("2016-04-05 04:30", periods=3, tz="UTC")
  47. dti2 = dti.tz_convert("US/Pacific")
  48. df4 = DataFrame({"A": dti, "B": dti2})
  49. assert (df4.dtypes == [dti.dtype, dti2.dtype]).all()
  50. assert (df4.T.dtypes == object).all()
  51. tm.assert_frame_equal(df4.T.T, df4)
  52. @pytest.mark.parametrize("tz", [None, "America/New_York"])
  53. def test_transpose_preserves_dtindex_equality_with_dst(self, tz):
  54. # GH#19970
  55. idx = date_range("20161101", "20161130", freq="4H", tz=tz)
  56. df = DataFrame({"a": range(len(idx)), "b": range(len(idx))}, index=idx)
  57. result = df.T == df.T
  58. expected = DataFrame(True, index=list("ab"), columns=idx)
  59. tm.assert_frame_equal(result, expected)
  60. def test_transpose_object_to_tzaware_mixed_tz(self):
  61. # GH#26825
  62. dti = date_range("2016-04-05 04:30", periods=3, tz="UTC")
  63. dti2 = dti.tz_convert("US/Pacific")
  64. # mixed all-tzaware dtypes
  65. df2 = DataFrame([dti, dti2])
  66. assert (df2.dtypes == object).all()
  67. res2 = df2.T
  68. assert (res2.dtypes == [dti.dtype, dti2.dtype]).all()
  69. def test_transpose_uint64(self, uint64_frame):
  70. result = uint64_frame.T
  71. expected = DataFrame(uint64_frame.values.T)
  72. expected.index = ["A", "B"]
  73. tm.assert_frame_equal(result, expected)
  74. def test_transpose_float(self, float_frame):
  75. frame = float_frame
  76. dft = frame.T
  77. for idx, series in dft.items():
  78. for col, value in series.items():
  79. if np.isnan(value):
  80. assert np.isnan(frame[col][idx])
  81. else:
  82. assert value == frame[col][idx]
  83. # mixed type
  84. index, data = tm.getMixedTypeDict()
  85. mixed = DataFrame(data, index=index)
  86. mixed_T = mixed.T
  87. for col, s in mixed_T.items():
  88. assert s.dtype == np.object_
  89. @td.skip_array_manager_invalid_test
  90. def test_transpose_get_view(self, float_frame, using_copy_on_write):
  91. dft = float_frame.T
  92. dft.iloc[:, 5:10] = 5
  93. if using_copy_on_write:
  94. assert (float_frame.values[5:10] != 5).all()
  95. else:
  96. assert (float_frame.values[5:10] == 5).all()
  97. @td.skip_array_manager_invalid_test
  98. def test_transpose_get_view_dt64tzget_view(self, using_copy_on_write):
  99. dti = date_range("2016-01-01", periods=6, tz="US/Pacific")
  100. arr = dti._data.reshape(3, 2)
  101. df = DataFrame(arr)
  102. assert df._mgr.nblocks == 1
  103. result = df.T
  104. assert result._mgr.nblocks == 1
  105. rtrip = result._mgr.blocks[0].values
  106. if using_copy_on_write:
  107. assert np.shares_memory(df._mgr.blocks[0].values._ndarray, rtrip._ndarray)
  108. else:
  109. assert np.shares_memory(arr._ndarray, rtrip._ndarray)