Skip to content

Commit 35f37fa

Browse files
jrebackwesm
authored andcommitted
support a non-none where that is empty in removals (e.g. where = [])
1 parent 06d55c0 commit 35f37fa

File tree

2 files changed

+38
-15
lines changed

2 files changed

+38
-15
lines changed

pandas/io/pytables.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ def remove(self, key, where=None):
389389
if group is not None:
390390

391391
# remove the node
392-
if where is None:
392+
if where is None or not len(where):
393393
group = self.get_node(key)
394394
group._f_remove(recursive=True)
395395

@@ -468,19 +468,17 @@ def _write_to_group(self, key, value, table=False, append=False,
468468

469469
# recursively create the groups
470470
path = '/'
471-
if len(paths) > 1:
472-
for p in paths[:-1]:
473-
new_path = path
474-
if not path.endswith('/'):
475-
new_path += '/'
476-
new_path += p
477-
group = self.get_node(new_path)
478-
if group is None:
479-
group = self.handle.createGroup(path, p)
480-
path = new_path
481-
482-
# create the required group
483-
group = self.handle.createGroup(path, paths[-1])
471+
for p in paths:
472+
if not len(p):
473+
continue
474+
new_path = path
475+
if not path.endswith('/'):
476+
new_path += '/'
477+
new_path += p
478+
group = self.get_node(new_path)
479+
if group is None:
480+
group = self.handle.createGroup(path, p)
481+
path = new_path
484482

485483
kind = _TYPE_MAP[type(value)]
486484
if table or (append and _is_table_type(group)):

pandas/io/tests/test_pytables.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ def test_put(self):
113113
self.store['a'] = ts
114114
self.store['b'] = df[:10]
115115
self.store['foo/bar/bah'] = df[:10]
116+
self.store['foo'] = df[:10]
117+
self.store['/foo'] = df[:10]
116118
self.store.put('c', df[:10], table=True)
117119

118120
# not OK, not a table
@@ -170,6 +172,19 @@ def test_append(self):
170172
store.append('df2', df[10:])
171173
tm.assert_frame_equal(store['df2'], df)
172174

175+
store.append('/df3', df[:10])
176+
store.append('/df3', df[10:])
177+
tm.assert_frame_equal(store['df3'], df)
178+
179+
# this is allowed by almost always don't want to do it
180+
import warnings
181+
import tables
182+
warnings.filterwarnings('ignore', category=tables.NaturalNameWarning)
183+
store.append('/df3 foo', df[:10])
184+
store.append('/df3 foo', df[10:])
185+
tm.assert_frame_equal(store['df3 foo'], df)
186+
warnings.filterwarnings('always', category=tables.NaturalNameWarning)
187+
173188
wp = tm.makePanel()
174189
store.append('wp1', wp.ix[:,:10,:])
175190
store.append('wp1', wp.ix[:,10:,:])
@@ -319,7 +334,6 @@ def test_remove(self):
319334
self.store.remove('b')
320335
self.assertEquals(len(self.store), 1)
321336

322-
323337
# __delitem__
324338
self.store['a'] = ts
325339
self.store['b'] = df
@@ -342,6 +356,17 @@ def test_remove_where(self):
342356
expected = wp.reindex(minor_axis = ['B','C'])
343357
tm.assert_panel_equal(rs,expected)
344358

359+
# empty where
360+
self.store.remove('wp')
361+
self.store.put('wp', wp, table=True)
362+
self.store.remove('wp', [])
363+
364+
# non - empty where
365+
self.store.remove('wp')
366+
self.store.put('wp', wp, table=True)
367+
self.assertRaises(Exception, self.store.remove,
368+
'wp', ['foo'])
369+
345370
# selectin non-table with a where
346371
self.store.put('wp2', wp, table=False)
347372
self.assertRaises(Exception, self.store.remove,

0 commit comments

Comments
 (0)