PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/pandas/tests/series/test_alter_axes.py

https://github.com/neurodebian/pandas
Python | 280 lines | 194 code | 62 blank | 24 comment | 14 complexity | a1d6865623b17342899a037c29a1d0d9 MD5 | raw file
  1. # coding=utf-8
  2. # pylint: disable-msg=E1101,W0612
  3. import pytest
  4. from datetime import datetime
  5. import numpy as np
  6. import pandas as pd
  7. from pandas import Index, Series
  8. from pandas.core.index import MultiIndex, RangeIndex
  9. from pandas.compat import lrange, range, zip
  10. from pandas.util.testing import assert_series_equal, assert_frame_equal
  11. import pandas.util.testing as tm
  12. from .common import TestData
  13. class TestSeriesAlterAxes(TestData):
  14. def test_setindex(self):
  15. # wrong type
  16. series = self.series.copy()
  17. pytest.raises(TypeError, setattr, series, 'index', None)
  18. # wrong length
  19. series = self.series.copy()
  20. pytest.raises(Exception, setattr, series, 'index',
  21. np.arange(len(series) - 1))
  22. # works
  23. series = self.series.copy()
  24. series.index = np.arange(len(series))
  25. assert isinstance(series.index, Index)
  26. def test_rename(self):
  27. renamer = lambda x: x.strftime('%Y%m%d')
  28. renamed = self.ts.rename(renamer)
  29. assert renamed.index[0] == renamer(self.ts.index[0])
  30. # dict
  31. rename_dict = dict(zip(self.ts.index, renamed.index))
  32. renamed2 = self.ts.rename(rename_dict)
  33. assert_series_equal(renamed, renamed2)
  34. # partial dict
  35. s = Series(np.arange(4), index=['a', 'b', 'c', 'd'], dtype='int64')
  36. renamed = s.rename({'b': 'foo', 'd': 'bar'})
  37. tm.assert_index_equal(renamed.index, Index(['a', 'foo', 'c', 'bar']))
  38. # index with name
  39. renamer = Series(np.arange(4),
  40. index=Index(['a', 'b', 'c', 'd'], name='name'),
  41. dtype='int64')
  42. renamed = renamer.rename({})
  43. assert renamed.index.name == renamer.index.name
  44. def test_rename_by_series(self):
  45. s = Series(range(5), name='foo')
  46. renamer = Series({1: 10, 2: 20})
  47. result = s.rename(renamer)
  48. expected = Series(range(5), index=[0, 10, 20, 3, 4], name='foo')
  49. tm.assert_series_equal(result, expected)
  50. def test_rename_set_name(self):
  51. s = Series(range(4), index=list('abcd'))
  52. for name in ['foo', 123, 123., datetime(2001, 11, 11), ('foo',)]:
  53. result = s.rename(name)
  54. assert result.name == name
  55. tm.assert_numpy_array_equal(result.index.values, s.index.values)
  56. assert s.name is None
  57. def test_rename_set_name_inplace(self):
  58. s = Series(range(3), index=list('abc'))
  59. for name in ['foo', 123, 123., datetime(2001, 11, 11), ('foo',)]:
  60. s.rename(name, inplace=True)
  61. assert s.name == name
  62. exp = np.array(['a', 'b', 'c'], dtype=np.object_)
  63. tm.assert_numpy_array_equal(s.index.values, exp)
  64. def test_set_name_attribute(self):
  65. s = Series([1, 2, 3])
  66. s2 = Series([1, 2, 3], name='bar')
  67. for name in [7, 7., 'name', datetime(2001, 1, 1), (1,), u"\u05D0"]:
  68. s.name = name
  69. assert s.name == name
  70. s2.name = name
  71. assert s2.name == name
  72. def test_set_name(self):
  73. s = Series([1, 2, 3])
  74. s2 = s._set_name('foo')
  75. assert s2.name == 'foo'
  76. assert s.name is None
  77. assert s is not s2
  78. def test_rename_inplace(self):
  79. renamer = lambda x: x.strftime('%Y%m%d')
  80. expected = renamer(self.ts.index[0])
  81. self.ts.rename(renamer, inplace=True)
  82. assert self.ts.index[0] == expected
  83. def test_set_index_makes_timeseries(self):
  84. idx = tm.makeDateIndex(10)
  85. s = Series(lrange(10))
  86. s.index = idx
  87. assert s.index.is_all_dates
  88. def test_reset_index(self):
  89. df = tm.makeDataFrame()[:5]
  90. ser = df.stack()
  91. ser.index.names = ['hash', 'category']
  92. ser.name = 'value'
  93. df = ser.reset_index()
  94. assert 'value' in df
  95. df = ser.reset_index(name='value2')
  96. assert 'value2' in df
  97. # check inplace
  98. s = ser.reset_index(drop=True)
  99. s2 = ser
  100. s2.reset_index(drop=True, inplace=True)
  101. assert_series_equal(s, s2)
  102. # level
  103. index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]],
  104. labels=[[0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 1, 2],
  105. [0, 1, 0, 1, 0, 1]])
  106. s = Series(np.random.randn(6), index=index)
  107. rs = s.reset_index(level=1)
  108. assert len(rs.columns) == 2
  109. rs = s.reset_index(level=[0, 2], drop=True)
  110. tm.assert_index_equal(rs.index, Index(index.get_level_values(1)))
  111. assert isinstance(rs, Series)
  112. def test_reset_index_level(self):
  113. df = pd.DataFrame([[1, 2, 3], [4, 5, 6]],
  114. columns=['A', 'B', 'C'])
  115. for levels in ['A', 'B'], [0, 1]:
  116. # With MultiIndex
  117. s = df.set_index(['A', 'B'])['C']
  118. result = s.reset_index(level=levels[0])
  119. tm.assert_frame_equal(result, df.set_index('B'))
  120. result = s.reset_index(level=levels[:1])
  121. tm.assert_frame_equal(result, df.set_index('B'))
  122. result = s.reset_index(level=levels)
  123. tm.assert_frame_equal(result, df)
  124. result = df.set_index(['A', 'B']).reset_index(level=levels,
  125. drop=True)
  126. tm.assert_frame_equal(result, df[['C']])
  127. with tm.assert_raises_regex(KeyError, 'Level E '):
  128. s.reset_index(level=['A', 'E'])
  129. # With single-level Index
  130. s = df.set_index('A')['B']
  131. result = s.reset_index(level=levels[0])
  132. tm.assert_frame_equal(result, df[['A', 'B']])
  133. result = s.reset_index(level=levels[:1])
  134. tm.assert_frame_equal(result, df[['A', 'B']])
  135. result = s.reset_index(level=levels[0], drop=True)
  136. tm.assert_series_equal(result, df['B'])
  137. with tm.assert_raises_regex(IndexError, 'Too many levels'):
  138. s.reset_index(level=[0, 1, 2])
  139. def test_reset_index_range(self):
  140. # GH 12071
  141. s = pd.Series(range(2), name='A', dtype='int64')
  142. series_result = s.reset_index()
  143. assert isinstance(series_result.index, RangeIndex)
  144. series_expected = pd.DataFrame([[0, 0], [1, 1]],
  145. columns=['index', 'A'],
  146. index=RangeIndex(stop=2))
  147. assert_frame_equal(series_result, series_expected)
  148. def test_reorder_levels(self):
  149. index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]],
  150. labels=[[0, 0, 0, 0, 0, 0], [0, 1, 2, 0, 1, 2],
  151. [0, 1, 0, 1, 0, 1]],
  152. names=['L0', 'L1', 'L2'])
  153. s = Series(np.arange(6), index=index)
  154. # no change, position
  155. result = s.reorder_levels([0, 1, 2])
  156. assert_series_equal(s, result)
  157. # no change, labels
  158. result = s.reorder_levels(['L0', 'L1', 'L2'])
  159. assert_series_equal(s, result)
  160. # rotate, position
  161. result = s.reorder_levels([1, 2, 0])
  162. e_idx = MultiIndex(levels=[['one', 'two', 'three'], [0, 1], ['bar']],
  163. labels=[[0, 1, 2, 0, 1, 2], [0, 1, 0, 1, 0, 1],
  164. [0, 0, 0, 0, 0, 0]],
  165. names=['L1', 'L2', 'L0'])
  166. expected = Series(np.arange(6), index=e_idx)
  167. assert_series_equal(result, expected)
  168. result = s.reorder_levels([0, 0, 0])
  169. e_idx = MultiIndex(levels=[['bar'], ['bar'], ['bar']],
  170. labels=[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
  171. [0, 0, 0, 0, 0, 0]],
  172. names=['L0', 'L0', 'L0'])
  173. expected = Series(np.arange(6), index=e_idx)
  174. assert_series_equal(result, expected)
  175. result = s.reorder_levels(['L0', 'L0', 'L0'])
  176. assert_series_equal(result, expected)
  177. def test_rename_axis_inplace(self):
  178. # GH 15704
  179. series = self.ts.copy()
  180. expected = series.rename_axis('foo')
  181. result = series.copy()
  182. no_return = result.rename_axis('foo', inplace=True)
  183. assert no_return is None
  184. assert_series_equal(result, expected)
  185. def test_set_axis_inplace(self):
  186. # GH14636
  187. s = Series(np.arange(4), index=[1, 3, 5, 7], dtype='int64')
  188. expected = s.copy()
  189. expected.index = list('abcd')
  190. for axis in 0, 'index':
  191. # inplace=True
  192. # The FutureWarning comes from the fact that we would like to have
  193. # inplace default to False some day
  194. for inplace, warn in (None, FutureWarning), (True, None):
  195. result = s.copy()
  196. kwargs = {'inplace': inplace}
  197. with tm.assert_produces_warning(warn):
  198. result.set_axis(list('abcd'), axis=axis, **kwargs)
  199. tm.assert_series_equal(result, expected)
  200. # inplace=False
  201. result = s.set_axis(list('abcd'), axis=0, inplace=False)
  202. tm.assert_series_equal(expected, result)
  203. # omitting the "axis" parameter
  204. with tm.assert_produces_warning(None):
  205. result = s.set_axis(list('abcd'), inplace=False)
  206. tm.assert_series_equal(result, expected)
  207. # wrong values for the "axis" parameter
  208. for axis in 2, 'foo':
  209. with tm.assert_raises_regex(ValueError, 'No axis named'):
  210. s.set_axis(list('abcd'), axis=axis, inplace=False)
  211. def test_set_axis_prior_to_deprecation_signature(self):
  212. s = Series(np.arange(4), index=[1, 3, 5, 7], dtype='int64')
  213. expected = s.copy()
  214. expected.index = list('abcd')
  215. for axis in 0, 'index':
  216. with tm.assert_produces_warning(FutureWarning):
  217. result = s.set_axis(0, list('abcd'), inplace=False)
  218. tm.assert_series_equal(result, expected)