@@ -1484,7 +1484,7 @@ class _ScalarAccessIndexer(_NDFrameIndexer):
1484
1484
1485
1485
""" access scalars quickly """
1486
1486
1487
- def _convert_key (self , key ):
1487
+ def _convert_key (self , key , is_setter = False ):
1488
1488
return list (key )
1489
1489
1490
1490
def __getitem__ (self , key ):
@@ -1505,7 +1505,7 @@ def __setitem__(self, key, value):
1505
1505
if len (key ) != self .obj .ndim :
1506
1506
raise ValueError ('Not enough indexers for scalar access '
1507
1507
'(setting)!' )
1508
- key = list (self ._convert_key (key ))
1508
+ key = list (self ._convert_key (key , is_setter = True ))
1509
1509
key .append (value )
1510
1510
self .obj .set_value (* key , takeable = self ._takeable )
1511
1511
@@ -1515,8 +1515,13 @@ class _AtIndexer(_ScalarAccessIndexer):
1515
1515
""" label based scalar accessor """
1516
1516
_takeable = False
1517
1517
1518
- def _convert_key (self , key ):
1518
+ def _convert_key (self , key , is_setter = False ):
1519
1519
""" require they keys to be the same type as the index (so we don't fallback) """
1520
+
1521
+ # allow arbitrary setting
1522
+ if is_setter :
1523
+ return list (key )
1524
+
1520
1525
for ax , i in zip (self .obj .axes , key ):
1521
1526
if ax .is_integer ():
1522
1527
if not com .is_integer (i ):
@@ -1536,7 +1541,7 @@ class _iAtIndexer(_ScalarAccessIndexer):
1536
1541
def _has_valid_setitem_indexer (self , indexer ):
1537
1542
self ._has_valid_positional_setitem_indexer (indexer )
1538
1543
1539
- def _convert_key (self , key ):
1544
+ def _convert_key (self , key , is_setter = False ):
1540
1545
""" require integer args (and convert to label arguments) """
1541
1546
for a , i in zip (self .obj .axes , key ):
1542
1547
if not com .is_integer (i ):
0 commit comments