test_formats.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import numpy as np
  2. import pytest
  3. import pandas as pd
  4. from pandas import (
  5. Index,
  6. MultiIndex,
  7. )
  8. def test_format(idx):
  9. idx.format()
  10. idx[:0].format()
  11. def test_format_integer_names():
  12. index = MultiIndex(
  13. levels=[[0, 1], [0, 1]], codes=[[0, 0, 1, 1], [0, 1, 0, 1]], names=[0, 1]
  14. )
  15. index.format(names=True)
  16. def test_format_sparse_config(idx):
  17. # GH1538
  18. with pd.option_context("display.multi_sparse", False):
  19. result = idx.format()
  20. assert result[1] == "foo two"
  21. def test_format_sparse_display():
  22. index = MultiIndex(
  23. levels=[[0, 1], [0, 1], [0, 1], [0]],
  24. codes=[
  25. [0, 0, 0, 1, 1, 1],
  26. [0, 0, 1, 0, 0, 1],
  27. [0, 1, 0, 0, 1, 0],
  28. [0, 0, 0, 0, 0, 0],
  29. ],
  30. )
  31. result = index.format()
  32. assert result[3] == "1 0 0 0"
  33. def test_repr_with_unicode_data():
  34. with pd.option_context("display.encoding", "UTF-8"):
  35. d = {"a": ["\u05d0", 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}
  36. index = pd.DataFrame(d).set_index(["a", "b"]).index
  37. assert "\\" not in repr(index) # we don't want unicode-escaped
  38. def test_repr_roundtrip_raises():
  39. mi = MultiIndex.from_product([list("ab"), range(3)], names=["first", "second"])
  40. msg = "Must pass both levels and codes"
  41. with pytest.raises(TypeError, match=msg):
  42. eval(repr(mi))
  43. def test_unicode_string_with_unicode():
  44. d = {"a": ["\u05d0", 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}
  45. idx = pd.DataFrame(d).set_index(["a", "b"]).index
  46. str(idx)
  47. def test_repr_max_seq_item_setting(idx):
  48. # GH10182
  49. idx = idx.repeat(50)
  50. with pd.option_context("display.max_seq_items", None):
  51. repr(idx)
  52. assert "..." not in str(idx)
  53. class TestRepr:
  54. def test_unicode_repr_issues(self):
  55. levels = [Index(["a/\u03c3", "b/\u03c3", "c/\u03c3"]), Index([0, 1])]
  56. codes = [np.arange(3).repeat(2), np.tile(np.arange(2), 3)]
  57. index = MultiIndex(levels=levels, codes=codes)
  58. repr(index.levels)
  59. repr(index.get_level_values(1))
  60. def test_repr_max_seq_items_equal_to_n(self, idx):
  61. # display.max_seq_items == n
  62. with pd.option_context("display.max_seq_items", 6):
  63. result = idx.__repr__()
  64. expected = """\
  65. MultiIndex([('foo', 'one'),
  66. ('foo', 'two'),
  67. ('bar', 'one'),
  68. ('baz', 'two'),
  69. ('qux', 'one'),
  70. ('qux', 'two')],
  71. names=['first', 'second'])"""
  72. assert result == expected
  73. def test_repr(self, idx):
  74. result = idx[:1].__repr__()
  75. expected = """\
  76. MultiIndex([('foo', 'one')],
  77. names=['first', 'second'])"""
  78. assert result == expected
  79. result = idx.__repr__()
  80. expected = """\
  81. MultiIndex([('foo', 'one'),
  82. ('foo', 'two'),
  83. ('bar', 'one'),
  84. ('baz', 'two'),
  85. ('qux', 'one'),
  86. ('qux', 'two')],
  87. names=['first', 'second'])"""
  88. assert result == expected
  89. with pd.option_context("display.max_seq_items", 5):
  90. result = idx.__repr__()
  91. expected = """\
  92. MultiIndex([('foo', 'one'),
  93. ('foo', 'two'),
  94. ...
  95. ('qux', 'one'),
  96. ('qux', 'two')],
  97. names=['first', 'second'], length=6)"""
  98. assert result == expected
  99. # display.max_seq_items == 1
  100. with pd.option_context("display.max_seq_items", 1):
  101. result = idx.__repr__()
  102. expected = """\
  103. MultiIndex([...
  104. ('qux', 'two')],
  105. names=['first', ...], length=6)"""
  106. assert result == expected
  107. def test_rjust(self, narrow_multi_index):
  108. mi = narrow_multi_index
  109. result = mi[:1].__repr__()
  110. expected = """\
  111. MultiIndex([('a', 9, '2000-01-01 00:00:00')],
  112. names=['a', 'b', 'dti'])"""
  113. assert result == expected
  114. result = mi[::500].__repr__()
  115. expected = """\
  116. MultiIndex([( 'a', 9, '2000-01-01 00:00:00'),
  117. ( 'a', 9, '2000-01-01 00:08:20'),
  118. ('abc', 10, '2000-01-01 00:16:40'),
  119. ('abc', 10, '2000-01-01 00:25:00')],
  120. names=['a', 'b', 'dti'])"""
  121. assert result == expected
  122. result = mi.__repr__()
  123. expected = """\
  124. MultiIndex([( 'a', 9, '2000-01-01 00:00:00'),
  125. ( 'a', 9, '2000-01-01 00:00:01'),
  126. ( 'a', 9, '2000-01-01 00:00:02'),
  127. ( 'a', 9, '2000-01-01 00:00:03'),
  128. ( 'a', 9, '2000-01-01 00:00:04'),
  129. ( 'a', 9, '2000-01-01 00:00:05'),
  130. ( 'a', 9, '2000-01-01 00:00:06'),
  131. ( 'a', 9, '2000-01-01 00:00:07'),
  132. ( 'a', 9, '2000-01-01 00:00:08'),
  133. ( 'a', 9, '2000-01-01 00:00:09'),
  134. ...
  135. ('abc', 10, '2000-01-01 00:33:10'),
  136. ('abc', 10, '2000-01-01 00:33:11'),
  137. ('abc', 10, '2000-01-01 00:33:12'),
  138. ('abc', 10, '2000-01-01 00:33:13'),
  139. ('abc', 10, '2000-01-01 00:33:14'),
  140. ('abc', 10, '2000-01-01 00:33:15'),
  141. ('abc', 10, '2000-01-01 00:33:16'),
  142. ('abc', 10, '2000-01-01 00:33:17'),
  143. ('abc', 10, '2000-01-01 00:33:18'),
  144. ('abc', 10, '2000-01-01 00:33:19')],
  145. names=['a', 'b', 'dti'], length=2000)"""
  146. assert result == expected
  147. def test_tuple_width(self, wide_multi_index):
  148. mi = wide_multi_index
  149. result = mi[:1].__repr__()
  150. expected = """MultiIndex([('a', 9, '2000-01-01 00:00:00', '2000-01-01 00:00:00', ...)],
  151. names=['a', 'b', 'dti_1', 'dti_2', 'dti_3'])""" # noqa:E501
  152. assert result == expected
  153. result = mi[:10].__repr__()
  154. expected = """\
  155. MultiIndex([('a', 9, '2000-01-01 00:00:00', '2000-01-01 00:00:00', ...),
  156. ('a', 9, '2000-01-01 00:00:01', '2000-01-01 00:00:01', ...),
  157. ('a', 9, '2000-01-01 00:00:02', '2000-01-01 00:00:02', ...),
  158. ('a', 9, '2000-01-01 00:00:03', '2000-01-01 00:00:03', ...),
  159. ('a', 9, '2000-01-01 00:00:04', '2000-01-01 00:00:04', ...),
  160. ('a', 9, '2000-01-01 00:00:05', '2000-01-01 00:00:05', ...),
  161. ('a', 9, '2000-01-01 00:00:06', '2000-01-01 00:00:06', ...),
  162. ('a', 9, '2000-01-01 00:00:07', '2000-01-01 00:00:07', ...),
  163. ('a', 9, '2000-01-01 00:00:08', '2000-01-01 00:00:08', ...),
  164. ('a', 9, '2000-01-01 00:00:09', '2000-01-01 00:00:09', ...)],
  165. names=['a', 'b', 'dti_1', 'dti_2', 'dti_3'])"""
  166. assert result == expected
  167. result = mi.__repr__()
  168. expected = """\
  169. MultiIndex([( 'a', 9, '2000-01-01 00:00:00', '2000-01-01 00:00:00', ...),
  170. ( 'a', 9, '2000-01-01 00:00:01', '2000-01-01 00:00:01', ...),
  171. ( 'a', 9, '2000-01-01 00:00:02', '2000-01-01 00:00:02', ...),
  172. ( 'a', 9, '2000-01-01 00:00:03', '2000-01-01 00:00:03', ...),
  173. ( 'a', 9, '2000-01-01 00:00:04', '2000-01-01 00:00:04', ...),
  174. ( 'a', 9, '2000-01-01 00:00:05', '2000-01-01 00:00:05', ...),
  175. ( 'a', 9, '2000-01-01 00:00:06', '2000-01-01 00:00:06', ...),
  176. ( 'a', 9, '2000-01-01 00:00:07', '2000-01-01 00:00:07', ...),
  177. ( 'a', 9, '2000-01-01 00:00:08', '2000-01-01 00:00:08', ...),
  178. ( 'a', 9, '2000-01-01 00:00:09', '2000-01-01 00:00:09', ...),
  179. ...
  180. ('abc', 10, '2000-01-01 00:33:10', '2000-01-01 00:33:10', ...),
  181. ('abc', 10, '2000-01-01 00:33:11', '2000-01-01 00:33:11', ...),
  182. ('abc', 10, '2000-01-01 00:33:12', '2000-01-01 00:33:12', ...),
  183. ('abc', 10, '2000-01-01 00:33:13', '2000-01-01 00:33:13', ...),
  184. ('abc', 10, '2000-01-01 00:33:14', '2000-01-01 00:33:14', ...),
  185. ('abc', 10, '2000-01-01 00:33:15', '2000-01-01 00:33:15', ...),
  186. ('abc', 10, '2000-01-01 00:33:16', '2000-01-01 00:33:16', ...),
  187. ('abc', 10, '2000-01-01 00:33:17', '2000-01-01 00:33:17', ...),
  188. ('abc', 10, '2000-01-01 00:33:18', '2000-01-01 00:33:18', ...),
  189. ('abc', 10, '2000-01-01 00:33:19', '2000-01-01 00:33:19', ...)],
  190. names=['a', 'b', 'dti_1', 'dti_2', 'dti_3'], length=2000)"""
  191. assert result == expected