Skip to content

stack() casts to float when called on levels not requiring it #17886

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
toobaz opened this issue Oct 16, 2017 · 7 comments
Closed

stack() casts to float when called on levels not requiring it #17886

toobaz opened this issue Oct 16, 2017 · 7 comments
Labels
Bug Dtype Conversions Unexpected or buggy dtype conversions Reshaping Concat, Merge/Join, Stack/Unstack, Explode

Comments

@toobaz
Copy link
Member

toobaz commented Oct 16, 2017

Code Sample, a copy-pastable example if possible

In [2]: df = pd.DataFrame(0, index=range(3),
   ...:                   columns=pd.MultiIndex.from_tuples([('w', 'a', 'j'),
   ...:                                                      ('w', 'a', 'k'),
   ...:                                                      ('w', 'b', 'j')],
   ...:                                                     names=['v', 'x', 'y']))

In [3]: df.stack(['x', 'y'])
Out[3]: 
v        w
  x y     
0 a j  0.0
    k  0.0
  b j  0.0
1 a j  0.0
    k  0.0
  b j  0.0
2 a j  0.0
    k  0.0
  b j  0.0

Problem description

Casting to float is not required (notice it would have been if df.stack() had been called without arguments).

Expected Output

In [4]: df.stack(['x', 'y']).astype(int)
Out[4]: 
v      w
  x y   
0 a j  0
    k  0
  b j  0
1 a j  0
    k  0
  b j  0
2 a j  0
    k  0
  b j  0

Output of pd.show_versions()

INSTALLED VERSIONS

commit: 6793a136dde139d968948b6ec9193cc3535abf6f
python: 3.5.3.final.0
python-bits: 64
OS: Linux
OS-release: 4.9.0-3-amd64
machine: x86_64
processor:
byteorder: little
LC_ALL: None
LANG: it_IT.UTF-8
LOCALE: it_IT.UTF-8

pandas: 0.21.0rc1+13.g6793a136d.dirty
pytest: 3.0.6
pip: 9.0.1
setuptools: None
Cython: 0.25.2
numpy: 1.12.1
scipy: 0.19.0
pyarrow: None
xarray: None
IPython: 5.1.0.dev
sphinx: 1.5.6
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.3.0
numexpr: 2.6.1
feather: 0.3.1
matplotlib: 2.0.0
openpyxl: None
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.6
lxml: None
bs4: 4.5.3
html5lib: 0.999999999
sqlalchemy: 1.0.15
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: 0.2.1

@jreback
Copy link
Contributor

jreback commented Oct 16, 2017

xref #17845

@jreback jreback added Dtype Conversions Unexpected or buggy dtype conversions Reshaping Concat, Merge/Join, Stack/Unstack, Explode Difficulty Intermediate labels Oct 16, 2017
@jreback jreback added this to the Next Major Release milestone Oct 16, 2017
@jreback
Copy link
Contributor

jreback commented Oct 16, 2017

again a special case where you have a cartesian product

@toobaz
Copy link
Member Author

toobaz commented Oct 16, 2017

For future reference (I'll try to produce PRs for this and #17845 when I find the time): this can actually be catched without actually looking at index values, because every time we stack all levels but one we obviously don't introduce any missing value.

@toobaz
Copy link
Member Author

toobaz commented Oct 16, 2017

Other reminder: when this is fixed, remove workaround in tests.

@jreback
Copy link
Contributor

jreback commented Oct 16, 2017

@toobaz hopefully fixing this issue will break that test (until work-around is removed)!

@toobaz
Copy link
Member Author

toobaz commented Oct 16, 2017

@toobaz hopefully fixing this issue will break that test (until work-around is removed)!

Well, no, the workaround should just then cast from int... to int, but it should still work.

@rhshadrach
Copy link
Member

With future_stack=True, the result is now integral. Closed by #55448

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Dtype Conversions Unexpected or buggy dtype conversions Reshaping Concat, Merge/Join, Stack/Unstack, Explode
Projects
None yet
Development

No branches or pull requests

5 participants