test_dropna.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import numpy as np
  2. import pytest
  3. from pandas import (
  4. DatetimeIndex,
  5. IntervalIndex,
  6. NaT,
  7. Period,
  8. Series,
  9. Timestamp,
  10. )
  11. import pandas._testing as tm
  12. class TestDropna:
  13. def test_dropna_empty(self):
  14. ser = Series([], dtype=object)
  15. assert len(ser.dropna()) == 0
  16. return_value = ser.dropna(inplace=True)
  17. assert return_value is None
  18. assert len(ser) == 0
  19. # invalid axis
  20. msg = "No axis named 1 for object type Series"
  21. with pytest.raises(ValueError, match=msg):
  22. ser.dropna(axis=1)
  23. def test_dropna_preserve_name(self, datetime_series):
  24. datetime_series[:5] = np.nan
  25. result = datetime_series.dropna()
  26. assert result.name == datetime_series.name
  27. name = datetime_series.name
  28. ts = datetime_series.copy()
  29. return_value = ts.dropna(inplace=True)
  30. assert return_value is None
  31. assert ts.name == name
  32. def test_dropna_no_nan(self):
  33. for ser in [
  34. Series([1, 2, 3], name="x"),
  35. Series([False, True, False], name="x"),
  36. ]:
  37. result = ser.dropna()
  38. tm.assert_series_equal(result, ser)
  39. assert result is not ser
  40. s2 = ser.copy()
  41. return_value = s2.dropna(inplace=True)
  42. assert return_value is None
  43. tm.assert_series_equal(s2, ser)
  44. def test_dropna_intervals(self):
  45. ser = Series(
  46. [np.nan, 1, 2, 3],
  47. IntervalIndex.from_arrays([np.nan, 0, 1, 2], [np.nan, 1, 2, 3]),
  48. )
  49. result = ser.dropna()
  50. expected = ser.iloc[1:]
  51. tm.assert_series_equal(result, expected)
  52. def test_dropna_period_dtype(self):
  53. # GH#13737
  54. ser = Series([Period("2011-01", freq="M"), Period("NaT", freq="M")])
  55. result = ser.dropna()
  56. expected = Series([Period("2011-01", freq="M")])
  57. tm.assert_series_equal(result, expected)
  58. def test_datetime64_tz_dropna(self, unit):
  59. # DatetimeLikeBlock
  60. ser = Series(
  61. [
  62. Timestamp("2011-01-01 10:00"),
  63. NaT,
  64. Timestamp("2011-01-03 10:00"),
  65. NaT,
  66. ],
  67. dtype=f"M8[{unit}]",
  68. )
  69. result = ser.dropna()
  70. expected = Series(
  71. [Timestamp("2011-01-01 10:00"), Timestamp("2011-01-03 10:00")],
  72. index=[0, 2],
  73. dtype=f"M8[{unit}]",
  74. )
  75. tm.assert_series_equal(result, expected)
  76. # DatetimeTZBlock
  77. idx = DatetimeIndex(
  78. ["2011-01-01 10:00", NaT, "2011-01-03 10:00", NaT], tz="Asia/Tokyo"
  79. ).as_unit(unit)
  80. ser = Series(idx)
  81. assert ser.dtype == f"datetime64[{unit}, Asia/Tokyo]"
  82. result = ser.dropna()
  83. expected = Series(
  84. [
  85. Timestamp("2011-01-01 10:00", tz="Asia/Tokyo"),
  86. Timestamp("2011-01-03 10:00", tz="Asia/Tokyo"),
  87. ],
  88. index=[0, 2],
  89. dtype=f"datetime64[{unit}, Asia/Tokyo]",
  90. )
  91. assert result.dtype == f"datetime64[{unit}, Asia/Tokyo]"
  92. tm.assert_series_equal(result, expected)
  93. @pytest.mark.parametrize("val", [1, 1.5])
  94. def test_dropna_ignore_index(self, val):
  95. # GH#31725
  96. ser = Series([1, 2, val], index=[3, 2, 1])
  97. result = ser.dropna(ignore_index=True)
  98. expected = Series([1, 2, val])
  99. tm.assert_series_equal(result, expected)
  100. ser.dropna(ignore_index=True, inplace=True)
  101. tm.assert_series_equal(ser, expected)