You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I took a look and I also like the logic now as how you explained it in your last post (for label based indexing: if the label evaluates as equal, then it is interpreted as the existing label)
A few things:
The whatsnew needs to be updated (as it still says it raises now for all cases, as you started the PR)
maybe mention that it only is about positional indexing? Otherwise people could think FloatIndex is removed.
(minor) When using iloc with a float (so the case it still should raise an error), the error message is not fully correct:
In [76]: s2 = s.copy()
In [77]: s2.iloc[2.0] = 10
TypeError: cannot do label indexing on <class 'pandas.indexes.range.RangeIndex'>
with these indexers [2.0] of <type 'float'>
This is not 'label' indexing, but 'integer' or 'positional' indexing
The behaviour of using a float indexer with ix on a non-numerical index has changed:
In [78]: s3 = pd.Series(range(3), index=list('abc'))
In [79]: s4 = s3.copy()
In [80]: s4.ix[1.0] = 10
In [81]: s4
Out[81]:
a 0
b 1
c 2
1.0 10
dtype: int64
In [82]: s4.index
Out[82]: Index([u'a', u'b', u'c', 1.0], dtype='object')
In [83]: pd.__version__
Out[83]: '0.17.1+350.g5f7c9e9'
and with 0.16.2
In [1]: pd.__version__
Out[1]: '0.16.2'
In [2]: s3 = pd.Series(range(3), index=list('abc'))
In [3]: s4 = s3.copy()
In [4]: s4.ix[1.0] = 10
C:\Anaconda\lib\site-packages\pandas\core\index.py:805: FutureWarning: scalar i
dexers for index type Index should be integers and not floating point
type(self).__name__),FutureWarning)
In [5]: s4
Out[5]:
a 0
b 10
c 2
dtype: int64
In [6]: s4.index
Out[6]: Index([u'a', u'b', u'c'], dtype='object')
The change is logical, as before the float was interpreted as a positional indexer (and for this the warning was raised). But now a float cannot be a positional indexer anymore, so it is interpreted as a new label.
To be clear, I think this change is OK, but just wanted to point out a case where this change will not raise an error but alter your results (worth mentioning in the whatsnew docs?)
The text was updated successfully, but these errors were encountered:
from #12246
@jorisvandenbossche
Some after merge feedback:
I took a look and I also like the logic now as how you explained it in your last post (for label based indexing: if the label evaluates as equal, then it is interpreted as the existing label)
A few things:
(minor) When using
iloc
with a float (so the case it still should raise an error), the error message is not fully correct:This is not 'label' indexing, but 'integer' or 'positional' indexing
The behaviour of using a float indexer with
ix
on a non-numerical index has changed:and with 0.16.2
The change is logical, as before the float was interpreted as a positional indexer (and for this the warning was raised). But now a float cannot be a positional indexer anymore, so it is interpreted as a new label.
To be clear, I think this change is OK, but just wanted to point out a case where this change will not raise an error but alter your results (worth mentioning in the whatsnew docs?)
The text was updated successfully, but these errors were encountered: