-
-
Notifications
You must be signed in to change notification settings - Fork 153
Description
Hi there :)
Thanks for your continued work and releasing v2.2.3.250308! Unfortunately, this release produced an error in our "Code Quality" CI checks: on code that is working as intended, mypy is now complaining about the type of an argument to df.loc[].
I have summarized the issue here and you can find today's CI failure here.
Describe the bug
When iterating over a MultiIndex and passing each iteration item to another function that uses it in a df.loc[] call like df.loc[[index]], mypy complains that the index type is invalid. This depends on the type hint of the function, of course, but the type of index is revealed to me as tuple and when I use this as the type hint, mypy complains.
To Reproduce
Here's a minimal working example:
import pandas as pd
df = pd.DataFrame(
{"foo": [1, 2, 3], "bar": ["one", "two", "three"], "baz": [1.0, 2.0, 3.0]}
).set_index(["foo", "bar"])
def test_function(test_df: pd.DataFrame, index: tuple) -> None:
print(test_df.loc[[index]])
for i in df.index:
test_function(df, i)Executing this prints
baz
foo bar
1 one 1.0
baz
foo bar
2 two 2.0
baz
foo bar
3 three 3.0But running mypy on this yields
error: Invalid index type "list[tuple[Any, ...]]" for "_LocIndexerFrame[DataFrame]"; expected type "slice[Any, Any, Any] | ndarray[Any, dtype[integer[Any]]] | Index[Any] | list[int] | Series[int] | <6 more items>" [index]Please complete the following information:
- OS: Linux (Ubuntu 24.04.2 LTS)
- Python 3.12.3
- Mypy 1.15.0
- pandas-stubs 2.2.3.250308
- pandas 2.2.3
Additional context
Maybe a better title for the question would be: how should I type hint index so that mypy is happy?