test_set_value.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import numpy as np
  2. from pandas.core.dtypes.common import is_float_dtype
  3. from pandas import (
  4. DataFrame,
  5. isna,
  6. )
  7. class TestSetValue:
  8. def test_set_value(self, float_frame):
  9. for idx in float_frame.index:
  10. for col in float_frame.columns:
  11. float_frame._set_value(idx, col, 1)
  12. assert float_frame[col][idx] == 1
  13. def test_set_value_resize(self, float_frame):
  14. res = float_frame._set_value("foobar", "B", 0)
  15. assert res is None
  16. assert float_frame.index[-1] == "foobar"
  17. assert float_frame._get_value("foobar", "B") == 0
  18. float_frame.loc["foobar", "qux"] = 0
  19. assert float_frame._get_value("foobar", "qux") == 0
  20. res = float_frame.copy()
  21. res._set_value("foobar", "baz", "sam")
  22. assert res["baz"].dtype == np.object_
  23. res = float_frame.copy()
  24. res._set_value("foobar", "baz", True)
  25. assert res["baz"].dtype == np.object_
  26. res = float_frame.copy()
  27. res._set_value("foobar", "baz", 5)
  28. assert is_float_dtype(res["baz"])
  29. assert isna(res["baz"].drop(["foobar"])).all()
  30. res._set_value("foobar", "baz", "sam")
  31. assert res.loc["foobar", "baz"] == "sam"
  32. def test_set_value_with_index_dtype_change(self):
  33. df_orig = DataFrame(np.random.randn(3, 3), index=range(3), columns=list("ABC"))
  34. # this is actually ambiguous as the 2 is interpreted as a positional
  35. # so column is not created
  36. df = df_orig.copy()
  37. df._set_value("C", 2, 1.0)
  38. assert list(df.index) == list(df_orig.index) + ["C"]
  39. # assert list(df.columns) == list(df_orig.columns) + [2]
  40. df = df_orig.copy()
  41. df.loc["C", 2] = 1.0
  42. assert list(df.index) == list(df_orig.index) + ["C"]
  43. # assert list(df.columns) == list(df_orig.columns) + [2]
  44. # create both new
  45. df = df_orig.copy()
  46. df._set_value("C", "D", 1.0)
  47. assert list(df.index) == list(df_orig.index) + ["C"]
  48. assert list(df.columns) == list(df_orig.columns) + ["D"]
  49. df = df_orig.copy()
  50. df.loc["C", "D"] = 1.0
  51. assert list(df.index) == list(df_orig.index) + ["C"]
  52. assert list(df.columns) == list(df_orig.columns) + ["D"]