test_rename_axis.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import numpy as np
  2. import pytest
  3. from pandas import (
  4. DataFrame,
  5. Index,
  6. MultiIndex,
  7. )
  8. import pandas._testing as tm
  9. class TestDataFrameRenameAxis:
  10. def test_rename_axis_inplace(self, float_frame):
  11. # GH#15704
  12. expected = float_frame.rename_axis("foo")
  13. result = float_frame.copy()
  14. return_value = no_return = result.rename_axis("foo", inplace=True)
  15. assert return_value is None
  16. assert no_return is None
  17. tm.assert_frame_equal(result, expected)
  18. expected = float_frame.rename_axis("bar", axis=1)
  19. result = float_frame.copy()
  20. return_value = no_return = result.rename_axis("bar", axis=1, inplace=True)
  21. assert return_value is None
  22. assert no_return is None
  23. tm.assert_frame_equal(result, expected)
  24. def test_rename_axis_raises(self):
  25. # GH#17833
  26. df = DataFrame({"A": [1, 2], "B": [1, 2]})
  27. with pytest.raises(ValueError, match="Use `.rename`"):
  28. df.rename_axis(id, axis=0)
  29. with pytest.raises(ValueError, match="Use `.rename`"):
  30. df.rename_axis({0: 10, 1: 20}, axis=0)
  31. with pytest.raises(ValueError, match="Use `.rename`"):
  32. df.rename_axis(id, axis=1)
  33. with pytest.raises(ValueError, match="Use `.rename`"):
  34. df["A"].rename_axis(id)
  35. def test_rename_axis_mapper(self):
  36. # GH#19978
  37. mi = MultiIndex.from_product([["a", "b", "c"], [1, 2]], names=["ll", "nn"])
  38. df = DataFrame(
  39. {"x": list(range(len(mi))), "y": [i * 10 for i in range(len(mi))]}, index=mi
  40. )
  41. # Test for rename of the Index object of columns
  42. result = df.rename_axis("cols", axis=1)
  43. tm.assert_index_equal(result.columns, Index(["x", "y"], name="cols"))
  44. # Test for rename of the Index object of columns using dict
  45. result = result.rename_axis(columns={"cols": "new"}, axis=1)
  46. tm.assert_index_equal(result.columns, Index(["x", "y"], name="new"))
  47. # Test for renaming index using dict
  48. result = df.rename_axis(index={"ll": "foo"})
  49. assert result.index.names == ["foo", "nn"]
  50. # Test for renaming index using a function
  51. result = df.rename_axis(index=str.upper, axis=0)
  52. assert result.index.names == ["LL", "NN"]
  53. # Test for renaming index providing complete list
  54. result = df.rename_axis(index=["foo", "goo"])
  55. assert result.index.names == ["foo", "goo"]
  56. # Test for changing index and columns at same time
  57. sdf = df.reset_index().set_index("nn").drop(columns=["ll", "y"])
  58. result = sdf.rename_axis(index="foo", columns="meh")
  59. assert result.index.name == "foo"
  60. assert result.columns.name == "meh"
  61. # Test different error cases
  62. with pytest.raises(TypeError, match="Must pass"):
  63. df.rename_axis(index="wrong")
  64. with pytest.raises(ValueError, match="Length of names"):
  65. df.rename_axis(index=["wrong"])
  66. with pytest.raises(TypeError, match="bogus"):
  67. df.rename_axis(bogus=None)
  68. @pytest.mark.parametrize(
  69. "kwargs, rename_index, rename_columns",
  70. [
  71. ({"mapper": None, "axis": 0}, True, False),
  72. ({"mapper": None, "axis": 1}, False, True),
  73. ({"index": None}, True, False),
  74. ({"columns": None}, False, True),
  75. ({"index": None, "columns": None}, True, True),
  76. ({}, False, False),
  77. ],
  78. )
  79. def test_rename_axis_none(self, kwargs, rename_index, rename_columns):
  80. # GH 25034
  81. index = Index(list("abc"), name="foo")
  82. columns = Index(["col1", "col2"], name="bar")
  83. data = np.arange(6).reshape(3, 2)
  84. df = DataFrame(data, index, columns)
  85. result = df.rename_axis(**kwargs)
  86. expected_index = index.rename(None) if rename_index else index
  87. expected_columns = columns.rename(None) if rename_columns else columns
  88. expected = DataFrame(data, expected_index, expected_columns)
  89. tm.assert_frame_equal(result, expected)