Skip to content

Commit f5fb709

Browse files
committed
BUG: properly handle None values in dict input to concat, close #1649
1 parent 6a0863f commit f5fb709

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

RELEASE.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ pandas 0.8.1
9595
DataFrame.xs / __getitem__ (#1644)
9696
- Fix use of string alias timestamps with tz-aware time series (#1647)
9797
- Fix Series.max/min and Series.describe on len-0 series (#1650)
98+
- Handle None values in dict passed to concat (#1649)
9899

99100
pandas 0.8.0
100101
============

pandas/tools/merge.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -858,8 +858,19 @@ def __init__(self, objs, axis=0, join='outer', join_axes=None,
858858
keys = sorted(objs)
859859
objs = [objs[k] for k in keys]
860860

861-
# filter Nones
862-
objs = [obj for obj in objs if obj is not None]
861+
if keys is None:
862+
objs = [obj for obj in objs if obj is not None]
863+
else:
864+
# #1649
865+
clean_keys = []
866+
clean_objs = []
867+
for k, v in zip(keys, objs):
868+
if v is None:
869+
continue
870+
clean_keys.append(k)
871+
clean_objs.append(v)
872+
objs = clean_objs
873+
keys = clean_keys
863874

864875
if len(objs) == 0:
865876
raise Exception('All objects passed were None')

pandas/tools/tests/test_merge.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,6 +1377,20 @@ def test_concat_datetime64_block(self):
13771377
result = concat([df, df])
13781378
self.assert_((result[:10]['time'] == rng).all())
13791379

1380+
def test_concat_keys_with_none(self):
1381+
# #1649
1382+
df0 = DataFrame([[10, 20, 30], [10, 20, 30], [10, 20, 30]])
1383+
1384+
result = concat(dict(a=None, b=df0, c=df0[:2], d=df0[:1], e=df0))
1385+
expected = concat(dict(b=df0, c=df0[:2], d=df0[:1], e=df0))
1386+
tm.assert_frame_equal(result, expected)
1387+
1388+
result = concat([None, df0, df0[:2], df0[:1], df0],
1389+
keys=['a', 'b', 'c', 'd', 'e'])
1390+
expected = concat([df0, df0[:2], df0[:1], df0],
1391+
keys=['b', 'c', 'd', 'e'])
1392+
tm.assert_frame_equal(result, expected)
1393+
13801394
class TestOrderedMerge(unittest.TestCase):
13811395

13821396
def setUp(self):

0 commit comments

Comments
 (0)