Skip to content

Commit 70c958f

Browse files
author
Carlos Souza
committed
Added tests for non-default indexes, scalar and multiple inputs, and results preserve columns
1 parent 6b745af commit 70c958f

File tree

4 files changed

+39
-5
lines changed

4 files changed

+39
-5
lines changed

doc/source/whatsnew/v0.20.0.txt

+2
Original file line numberDiff line numberDiff line change
@@ -930,3 +930,5 @@ Bug Fixes
930930
- Bug in ``pd.melt()`` where passing a tuple value for ``value_vars`` caused a ``TypeError`` (:issue:`15348`)
931931
- Bug in ``.eval()`` which caused multiline evals to fail with local variables not on the first line (:issue:`15342`)
932932
- Bug in ``pd.read_msgpack`` which did not allow to load dataframe with an index of type ``CategoricalIndex`` (:issue:`15487`)
933+
934+
- Bug in ``Series.asof`` which raised an error if the series contained all ``nans`` (:issue:`15713`)

pandas/core/generic.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -3972,11 +3972,11 @@ def asof(self, where, subset=None):
39723972
where = Index(where) if is_list else Index([where])
39733973

39743974
nulls = self.isnull() if is_series else self[subset].isnull().any(1)
3975-
if nulls.values.all():
3975+
if nulls.all():
39763976
if is_series:
3977-
return pd.Series([np.nan])
3977+
return pd.Series(np.nan, index=where)
39783978
else:
3979-
return pd.DataFrame([np.nan])
3979+
return pd.DataFrame(np.nan, index=where, columns=self.columns)
39803980

39813981
locs = self.index.asof_locs(where, ~(nulls.values))
39823982

pandas/tests/frame/test_asof.py

+20-2
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class TestFrameAsof(TestData, tm.TestCase):
1313

1414
def setUp(self):
1515
self.N = N = 50
16-
rng = date_range('1/1/1990', periods=N, freq='53s')
16+
self.rng = date_range('1/1/1990', periods=N, freq='53s')
1717
self.df = DataFrame({'A': np.arange(N), 'B': np.arange(N)},
18-
index=rng)
18+
index=self.rng)
1919

2020
def test_basic(self):
2121

@@ -86,3 +86,21 @@ def test_all_nans(self):
8686
result = DataFrame([np.nan]).asof([0])
8787
expected = DataFrame([np.nan])
8888
tm.assert_frame_equal(result, expected)
89+
90+
# testing non-default indexes, multiple inputs
91+
dates = date_range('1/1/1990', periods=self.N * 3, freq='25s')
92+
result = DataFrame(np.nan, index=self.rng, columns=['A']).asof(dates)
93+
expected = DataFrame(np.nan, index=dates, columns=['A'])
94+
tm.assert_frame_equal(result, expected)
95+
96+
# testing multiple columns
97+
dates = date_range('1/1/1990', periods=self.N * 3, freq='25s')
98+
result = DataFrame(np.nan, index=self.rng, columns=['A', 'B', 'C']).asof(dates)
99+
expected = DataFrame(np.nan, index=dates, columns=['A', 'B', 'C'])
100+
tm.assert_frame_equal(result, expected)
101+
102+
# testing scalar input
103+
date = date_range('1/1/1990', periods=self.N * 3, freq='25s')[0]
104+
result = DataFrame(np.nan, index=self.rng, columns=['A']).asof(date)
105+
expected = DataFrame(np.nan, index=[date], columns=['A'])
106+
tm.assert_frame_equal(result, expected)

pandas/tests/series/test_asof.py

+14
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,17 @@ def test_all_nans(self):
154154
result = Series([np.nan]).asof([0])
155155
expected = Series([np.nan])
156156
tm.assert_series_equal(result, expected)
157+
158+
# testing non-default indexes
159+
N = 50
160+
rng = date_range('1/1/1990', periods=N, freq='53s')
161+
162+
dates = date_range('1/1/1990', periods=N * 3, freq='25s')
163+
result = Series(np.nan, index=rng).asof(dates)
164+
expected = Series(np.nan, index=dates)
165+
tm.assert_series_equal(result, expected)
166+
167+
# testing scalar input
168+
date = date_range('1/1/1990', periods=N * 3, freq='25s')[0]
169+
result = Series(np.nan, index=rng).asof(date)
170+
self.assertTrue(result != result)

0 commit comments

Comments
 (0)