pandas-dev / pandas-stubs

Public type stubs for pandas
BSD 3-Clause "New" or "Revised" License
219 stars 113 forks source link

Stack method - Unexpected keyword argument #925

Open rinzool opened 1 month ago

rinzool commented 1 month ago

Describe the bug Method .stack of dataframe is not fully typed, it misses argument sort and future_stack

To Reproduce

  1. Provide a minimal runnable pandas example that is not properly checked by the stubs.
    import pandas as pd
    df = pd.DataFrame([1, 2, 3])
    df.stack(future_stack=True)
    df.stack(sort=True)
  2. Indicate which type checker you are using (mypy or pyright). I am using mypy (1.10.0)
  3. Show the error message received from that type checker while checking your example.
    ex.py:3: error: Unexpected keyword argument "future_stack" for "stack" of "DataFrame"  [call-arg]
    ex.py:4: error: Unexpected keyword argument "sort" for "stack" of "DataFrame"  [call-arg]
    Found 2 errors in 1 file (checked 1 source file)

Please complete the following information:

Additional context I'll be glad to open a PR to add those two arguments with some tests if that's ok for you, but I'm not entirely sure about what is the philosophy about pandas-stubs here. Since they are new arguments in 2.1, could it be bad to add those arguments in pandas stubs for someone who sill uses 2.0?

Dr-Irv commented 1 month ago

I'll be glad to open a PR to add those two arguments with some tests if that's ok for you, but I'm not entirely sure about what is the philosophy about pandas-stubs here. Since they are new arguments in 2.1, could it be bad to add those arguments in pandas stubs for someone who sill uses 2.0?

Not a problem, because we only support the latest version of pandas in the stubs. Also, the arguments are optional, so anyone using an earlier version of pandas wouldn't be using them anyway.

Thanks for the report. Given that future_stack is incompatible with sort and dropna, you'd need overloads to show the possible combinations of the arguments.

PR with test welcome

rinzool commented 1 month ago

Thanks @Dr-Irv for the @overload tips I just opened a PR: https://github.com/pandas-dev/pandas-stubs/pull/926 Locally pytest, pyright and mypy works as expected