Skip to content

Commit 0b06d76

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

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
@@ -3250,7 +3250,7 @@ def validate_data_columns(self, data_columns, min_itemsize):
32503250
# evaluate the passed data_columns, True == use all columns
32513251
# take only valide axis labels
32523252
if data_columns is True:
3253-
data_columns = axis_labels
3253+
data_columns = list(axis_labels)
32543254
elif data_columns is None:
32553255
data_columns = []
32563256

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

40924092
def read(self, columns=None, **kwargs):
40934093

@@ -4188,7 +4188,7 @@ def write(self, obj, data_columns=None, **kwargs):
41884188
if data_columns is None:
41894189
data_columns = []
41904190
elif data_columns is True:
4191-
data_columns = obj.columns[:]
4191+
data_columns = list(obj.columns[:])
41924192
obj, self.levels = self.validate_multiindex(obj)
41934193
for n in self.levels:
41944194
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
@@ -1339,6 +1339,16 @@ def check_col(key, name, size):
13391339
[[124, 'abcdefqhij'], [346, 'abcdefghijklmnopqrtsuvwxyz']])
13401340
self.assertRaises(ValueError, store.append, 'df_new', df_new)
13411341

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

0 commit comments

Comments
 (0)