Skip to content

Commit be81d09

Browse files
committed
BUG: Ensure data_columns is always a list (i.e. min_itemsize can extend it)
closes pandas-dev#10381
1 parent 70f79ce commit be81d09

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

pandas/io/pytables.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3247,7 +3247,7 @@ def validate_data_columns(self, data_columns, min_itemsize):
32473247
# evaluate the passed data_columns, True == use all columns
32483248
# take only valide axis labels
32493249
if data_columns is True:
3250-
data_columns = axis_labels
3250+
data_columns = list(axis_labels)
32513251
elif data_columns is None:
32523252
data_columns = []
32533253

@@ -4084,7 +4084,7 @@ def write(self, obj, data_columns=None, **kwargs):
40844084
obj = DataFrame({name: obj}, index=obj.index)
40854085
obj.columns = [name]
40864086
return super(AppendableSeriesTable, self).write(
4087-
obj=obj, data_columns=obj.columns, **kwargs)
4087+
obj=obj, data_columns=list(obj.columns), **kwargs)
40884088

40894089
def read(self, columns=None, **kwargs):
40904090

@@ -4185,7 +4185,7 @@ def write(self, obj, data_columns=None, **kwargs):
41854185
if data_columns is None:
41864186
data_columns = []
41874187
elif data_columns is True:
4188-
data_columns = obj.columns[:]
4188+
data_columns = list(obj.columns[:])
41894189
obj, self.levels = self.validate_multiindex(obj)
41904190
for n in self.levels:
41914191
if n not in data_columns:

pandas/io/tests/test_pytables.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,6 +1338,16 @@ def check_col(key, name, size):
13381338
[[124, 'abcdefqhij'], [346, 'abcdefghijklmnopqrtsuvwxyz']])
13391339
self.assertRaises(ValueError, store.append, 'df_new', df_new)
13401340

1341+
# min_itemsize on Series with Multiindex (GH 10381)
1342+
df = tm.makeMixedDataFrame().set_index(['A', 'C'])
1343+
store.append('ss', df['B'], min_itemsize={'index': 4})
1344+
tm.assert_series_equal(store.select('ss'), df['B'])
1345+
1346+
# min_itemsize with MultiIndex and data_columns=True
1347+
store.append('midf', df, data_columns=True,
1348+
min_itemsize={'index': 4})
1349+
tm.assert_frame_equal(store.select('midf'), df)
1350+
13411351
# with nans
13421352
_maybe_remove(store, 'df')
13431353
df = tm.makeTimeDataFrame()

0 commit comments

Comments
 (0)