@@ -2989,7 +2989,6 @@ def data_orientation(self):
2989
2989
2990
2990
def queryables (self ):
2991
2991
""" return a dict of the kinds allowable columns for this object """
2992
-
2993
2992
# compute the values_axes queryables
2994
2993
return dict (
2995
2994
[(a .cname , a ) for a in self .index_axes ] +
@@ -3090,6 +3089,13 @@ def validate_min_itemsize(self, min_itemsize):
3090
3089
return
3091
3090
3092
3091
q = self .queryables ()
3092
+
3093
+ if ('index' in min_itemsize ) and ('index' not in q ): # issue #11364
3094
+ for axname in self .index_axes :
3095
+ #print("axname:" , axname.name)
3096
+ min_itemsize [ axname .name ] = min_itemsize ['index' ]
3097
+ del min_itemsize ['index' ]
3098
+
3093
3099
for k , v in min_itemsize .items ():
3094
3100
3095
3101
# ok, apply generally
@@ -3099,6 +3105,7 @@ def validate_min_itemsize(self, min_itemsize):
3099
3105
raise ValueError (
3100
3106
"min_itemsize has the key [%s] which is not an axis or "
3101
3107
"data_column" % k )
3108
+ return min_itemsize
3102
3109
3103
3110
@property
3104
3111
def indexables (self ):
@@ -3288,7 +3295,7 @@ def create_axes(self, axes, obj, validate=True, nan_rep=None,
3288
3295
3289
3296
# map axes to numbers
3290
3297
axes = [obj ._get_axis_number (a ) for a in axes ]
3291
-
3298
+
3292
3299
# do we have an existing table (if so, use its axes & data_columns)
3293
3300
if self .infer_axes ():
3294
3301
existing_table = self .copy ()
@@ -3318,15 +3325,17 @@ def create_axes(self, axes, obj, validate=True, nan_rep=None,
3318
3325
3319
3326
# create axes to index and non_index
3320
3327
index_axes_map = dict ()
3328
+
3321
3329
for i , a in enumerate (obj .axes ):
3322
3330
3323
3331
if i in axes :
3324
- name = obj ._AXIS_NAMES [i ]
3332
+ name = getattr (obj , obj ._AXIS_NAMES [i ]).name # obj._AXIS_NAMES[i]
3333
+ if name is None :
3334
+ name = obj ._AXIS_NAMES [i ]
3325
3335
index_axes_map [i ] = _convert_index (
3326
3336
a , self .encoding , self .format_type
3327
3337
).set_name (name ).set_axis (i )
3328
3338
else :
3329
-
3330
3339
# we might be able to change the axes on the appending data if
3331
3340
# necessary
3332
3341
append_axis = list (a )
@@ -3346,18 +3355,14 @@ def create_axes(self, axes, obj, validate=True, nan_rep=None,
3346
3355
3347
3356
self .non_index_axes .append ((i , append_axis ))
3348
3357
3358
+
3349
3359
# set axis positions (based on the axes)
3350
3360
self .index_axes = [
3351
3361
index_axes_map [a ].set_pos (j ).update_info (self .info )
3352
3362
for j , a in enumerate (axes )
3353
3363
]
3354
3364
j = len (self .index_axes )
3355
3365
3356
- # check for column conflicts
3357
- if validate :
3358
- for a in self .axes :
3359
- a .maybe_set_size (min_itemsize = min_itemsize )
3360
-
3361
3366
# reindex by our non_index_axes & compute data_columns
3362
3367
for a in self .non_index_axes :
3363
3368
obj = _reindex_axis (obj , a [0 ], a [1 ])
@@ -3455,17 +3460,23 @@ def get_blk_items(mgr, blocks):
3455
3460
% (b .dtype .name , b_items , str (detail ))
3456
3461
)
3457
3462
j += 1
3458
-
3459
- # validate our min_itemsize
3460
- self .validate_min_itemsize (min_itemsize )
3461
-
3463
+
3462
3464
# validate our metadata
3463
3465
self .validate_metadata (existing_table )
3464
3466
3465
3467
# validate the axes if we have an existing table
3466
3468
if validate :
3467
3469
self .validate (existing_table )
3468
3470
3471
+ # validate and correct our min_itemsize # issue #11364
3472
+ min_itemsize = self .validate_min_itemsize (min_itemsize )
3473
+
3474
+ # check for column conflicts
3475
+ if validate :
3476
+ for a in self .axes :
3477
+ a .maybe_set_size (min_itemsize = min_itemsize )
3478
+
3479
+
3469
3480
def process_axes (self , obj , columns = None ):
3470
3481
""" process axes filters """
3471
3482
0 commit comments