Skip to content

Slicing an index with DateTime throws AttributeError: 'int' object has no attribute 'stop' #26944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
soilstack opened this issue Jun 19, 2019 · 5 comments · Fixed by #27127
Closed
Labels
Datetime Datetime data dtype Indexing Related to indexing on series/frames, not to indexes themselves MultiIndex
Milestone

Comments

@soilstack
Copy link
Contributor

soilstack commented Jun 19, 2019

Code Sample, a copy-pastable example if possible

idx = pd.IndexSlice

dt_index = pd.date_range(start="1jan2019 00:15:33",periods=100,freq="h")  #this will fail
#dt_index = pd.date_range(start="1jan2019",periods=100,freq="d")    #this works

zf = pd.DataFrame(index=dt_index)
zf['foo']=10
zf['bar']="squat"
zf['zaa']=range(len(dt_index))
zf.index.name="date"
zf = zf.reset_index().set_index(["date", "bar", "zaa"])


zf.loc[idx['2019-1-1':'2019-1-3',"squat",:],:]     # This works ok
zf.loc[idx['2019-1-1':,"squat",:],:]     # This fails  AttributeError: 'int' object has no attribute 'stop'
zf.loc[idx['2019-1-1':None,'squat',:],:]           # AttributeError: 'int' object has no attribute 'stop'

Problem description

The same slice of a multindex fails if the index is DateTimes but works if the index is Dates-only.
This occurs in pandas 0.24.2

A related-sounding ticket said if I have a reproducible example, post a new ticket.

Expected Output

same output as if I'd sliced a dates-only index (provided in the example above)

Output of pd.show_versions()

[paste the output of pd.show_versions() here below this line]
INSTALLED VERSIONS

commit: None
python: 3.7.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.24.2
pytest: 4.3.1
pip: 19.0.3
setuptools: 40.8.0
Cython: 0.29.6
numpy: 1.16.2
scipy: 1.2.1
pyarrow: None
xarray: None
IPython: 7.4.0
sphinx: 1.8.5
patsy: 0.5.1
dateutil: 2.8.0
pytz: 2018.9
blosc: None
bottleneck: 1.2.1
tables: 3.5.1
numexpr: 2.6.9
feather: None
matplotlib: 3.0.3
openpyxl: 2.6.1
xlrd: 1.2.0
xlwt: 1.3.0
xlsxwriter: 1.1.5
lxml.etree: 4.3.2
bs4: 4.7.1
html5lib: 1.0.1
sqlalchemy: 1.3.1
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
gcsfs: None

@TomAugspurger
Copy link
Contributor

Looks like idx is undefined in your example.

@soilstack
Copy link
Contributor Author

Looks like idx is undefined in your example.

Oh dear, yes. Sorry, this is fixed in the example now.

@soilstack
Copy link
Contributor Author

Looks like idx is undefined in your example.

fixed example

@TomAugspurger
Copy link
Contributor

Thanks. Looks like a bug in

if isinstance(start, slice) or isinstance(stop, slice):
# we have a slice for start and/or stop
# a partial date slicer on a DatetimeIndex generates a slice
# note that the stop ALREADY includes the stopped point (if
# it was a string sliced)
return convert_indexer(start.start, stop.stop, step)

It's thinking stop is a slice object, when it could be an int or a slice. I'd recommend something like

start = getattr(start, 'start', start)
stop = getattr(stop, 'stop', stop)
return convert_indexer(start, stop, step)

Interested in making a PR?

@TomAugspurger TomAugspurger added Indexing Related to indexing on series/frames, not to indexes themselves Difficulty Intermediate labels Jun 24, 2019
@TomAugspurger TomAugspurger added this to the Contributions Welcome milestone Jun 24, 2019
@soilstack
Copy link
Contributor Author

Yes, that sounds like an interesting thing to work on. I guess I follow the instructions here on pull requests. Anything else to be aware of ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Datetime Datetime data dtype Indexing Related to indexing on series/frames, not to indexes themselves MultiIndex
Projects
None yet
4 participants