Skip to content

Commit 4dddf21

Browse files
committed
BUG: Append the empty frame with columns, #3121
1 parent 1b7f070 commit 4dddf21

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

pandas/core/common.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,6 +1667,9 @@ def _concat_compat(to_concat, axis=0):
16671667
# filter empty arrays
16681668
to_concat = [x for x in to_concat if x.shape[axis] > 0]
16691669

1670+
# return the empty np array, if nothing to concatenate, #3121
1671+
if not to_concat: return np.array([], dtype=object)
1672+
16701673
is_datetime64 = [x.dtype == _NS_DTYPE for x in to_concat]
16711674
if all(is_datetime64):
16721675
# work around NumPy 1.6 bug

pandas/tests/test_frame.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5108,6 +5108,84 @@ def test_append_list_of_series_dicts(self):
51085108
expected = df.append(DataFrame(dicts), ignore_index=True)
51095109
assert_frame_equal(result, expected)
51105110

5111+
def test_append_empty_dataframe(self):
5112+
5113+
# Empty df append empty df
5114+
df1 = DataFrame([])
5115+
df2 = DataFrame([])
5116+
result = df1.append(df2)
5117+
expected = df1.copy()
5118+
assert_frame_equal(result, expected)
5119+
5120+
# Non-empty df append empty df
5121+
df1 = DataFrame(np.random.randn(5, 2))
5122+
df2 = DataFrame()
5123+
result = df1.append(df2)
5124+
expected = df1.copy()
5125+
assert_frame_equal(result, expected)
5126+
5127+
# Empty df with columns append empty df
5128+
df1 = DataFrame(columns=['bar', 'foo'])
5129+
df2 = DataFrame()
5130+
result = df1.append(df2)
5131+
expected = df1.copy()
5132+
assert_frame_equal(result, expected)
5133+
5134+
# Non-Empty df with columns append empty df
5135+
df1 = DataFrame(np.random.randn(5, 2), columns=['bar', 'foo'])
5136+
df2 = DataFrame()
5137+
result = df1.append(df2)
5138+
expected = df1.copy()
5139+
assert_frame_equal(result, expected)
5140+
5141+
def test_asfreq(self):
5142+
offset_monthly = self.tsframe.asfreq(datetools.bmonthEnd)
5143+
rule_monthly = self.tsframe.asfreq('BM')
5144+
5145+
assert_almost_equal(offset_monthly['A'], rule_monthly['A'])
5146+
5147+
filled = rule_monthly.asfreq('B', method='pad')
5148+
# TODO: actually check that this worked.
5149+
5150+
# don't forget!
5151+
filled_dep = rule_monthly.asfreq('B', method='pad')
5152+
5153+
# test does not blow up on length-0 DataFrame
5154+
zero_length = self.tsframe.reindex([])
5155+
result = zero_length.asfreq('BM')
5156+
self.assert_(result is not zero_length)
5157+
5158+
def test_asfreq_datetimeindex(self):
5159+
df = DataFrame({'A': [1, 2, 3]},
5160+
index=[datetime(2011, 11, 01), datetime(2011, 11, 2),
5161+
datetime(2011, 11, 3)])
5162+
df = df.asfreq('B')
5163+
self.assert_(isinstance(df.index, DatetimeIndex))
5164+
5165+
ts = df['A'].asfreq('B')
5166+
self.assert_(isinstance(ts.index, DatetimeIndex))
5167+
5168+
def test_at_time_between_time_datetimeindex(self):
5169+
index = pan.date_range("2012-01-01", "2012-01-05", freq='30min')
5170+
df = DataFrame(randn(len(index), 5), index=index)
5171+
akey = time(12, 0, 0)
5172+
bkey = slice(time(13, 0, 0), time(14, 0, 0))
5173+
ainds = [24, 72, 120, 168]
5174+
binds = [26, 27, 28, 74, 75, 76, 122, 123, 124, 170, 171, 172]
5175+
5176+
result = df.at_time(akey)
5177+
expected = df.ix[akey]
5178+
expected2 = df.ix[ainds]
5179+
assert_frame_equal(result, expected)
5180+
assert_frame_equal(result, expected2)
5181+
self.assert_(len(result) == 4)
5182+
5183+
result = df.between_time(bkey.start, bkey.stop)
5184+
expected = df.ix[bkey]
5185+
expected2 = df.ix[binds]
5186+
5187+
# Non-Empty df with columns append empty df
5188+
51115189
def test_asfreq(self):
51125190
offset_monthly = self.tsframe.asfreq(datetools.bmonthEnd)
51135191
rule_monthly = self.tsframe.asfreq('BM')

0 commit comments

Comments
 (0)