|
28 | 28 | _check_mixed_int)
|
29 | 29 |
|
30 | 30 |
|
| 31 | +class TestDataFrameArithmetic(object): |
| 32 | + |
| 33 | + @pytest.mark.xfail(reason='GH#7996 datetime64 units not converted to nano') |
| 34 | + def test_frame_sub_datetime64_not_ns(self): |
| 35 | + df = pd.DataFrame(date_range('20130101', periods=3)) |
| 36 | + dt64 = np.datetime64('2013-01-01') |
| 37 | + assert dt64.dtype == 'datetime64[D]' |
| 38 | + res = df - dt64 |
| 39 | + expected = pd.DataFrame([pd.Timedelta(days=0), pd.Timedelta(days=1), |
| 40 | + pd.Timedelta(days=2)]) |
| 41 | + tm.assert_frame_equal(res, expected) |
| 42 | + |
| 43 | + @pytest.mark.parametrize('data', [ |
| 44 | + [1, 2, 3], |
| 45 | + [1.1, 2.2, 3.3], |
| 46 | + [pd.Timestamp('2011-01-01'), pd.Timestamp('2011-01-02'), pd.NaT], |
| 47 | + ['x', 'y', 1]]) |
| 48 | + @pytest.mark.parametrize('dtype', [None, object]) |
| 49 | + def test_frame_radd_str_invalid(self, dtype, data): |
| 50 | + df = DataFrame(data, dtype=dtype) |
| 51 | + with pytest.raises(TypeError): |
| 52 | + 'foo_' + df |
| 53 | + |
| 54 | + @pytest.mark.parametrize('dtype', [None, object]) |
| 55 | + def test_frame_with_dtype_radd_int(self, dtype): |
| 56 | + df = pd.DataFrame([1, 2, 3], dtype=dtype) |
| 57 | + expected = pd.DataFrame([2, 3, 4], dtype=dtype) |
| 58 | + result = 1 + df |
| 59 | + assert_frame_equal(result, expected) |
| 60 | + result = df + 1 |
| 61 | + assert_frame_equal(result, expected) |
| 62 | + |
| 63 | + @pytest.mark.parametrize('dtype', [None, object]) |
| 64 | + def test_frame_with_dtype_radd_nan(self, dtype): |
| 65 | + df = pd.DataFrame([1, 2, 3], dtype=dtype) |
| 66 | + expected = pd.DataFrame([np.nan, np.nan, np.nan], dtype=dtype) |
| 67 | + result = np.nan + df |
| 68 | + assert_frame_equal(result, expected) |
| 69 | + result = df + np.nan |
| 70 | + assert_frame_equal(result, expected) |
| 71 | + |
| 72 | + def test_frame_radd_str(self): |
| 73 | + df = pd.DataFrame(['x', np.nan, 'x']) |
| 74 | + assert_frame_equal('a' + df, pd.DataFrame(['ax', np.nan, 'ax'])) |
| 75 | + assert_frame_equal(df + 'a', pd.DataFrame(['xa', np.nan, 'xa'])) |
| 76 | + |
| 77 | + |
31 | 78 | class TestDataFrameOperators(TestData):
|
32 | 79 |
|
33 | 80 | def test_operators(self):
|
|
0 commit comments