Pandas DataFrame mypy error: slice index must be an integer or None
Pandas DataFrame mypy error: slice index must be an integer or None
下面一行
pd.DataFrame({"col1": [1.1, 2.2]}, index=[3.3, 4.4])[2.5:3.5]
引发 [2.5
上的 mypy linting 错误
Slice index must be an integer or None
这是有效的语法并且正确returns
col1
3.3 1.1
没有 # type: ignore
,我该如何解决这个 linting 错误?
版本:
- pandas 1.3.0
- mypy 0.931
有问题的代码:
def get_dataframe(
ts_data: GroupTs,
ts_group_name: str,
start_time: Optional[float] = None,
end_time: Optional[float] = None,
) -> pd.DataFrame:
df = pd.DataFrame(ts_data.group[ts_group_name].ts_dict)[
start_time:end_time
].interpolate(
method="index", limit_area="inside"
) # type: pd.DataFrame
return df[~df.index.duplicated()]
我担心现在是 by design,但如果你必须这样做,你可以通过使用可调用的切片来使 mypy 静音,如下所示:
import pandas as pd
df = pd.DataFrame({"col1": [1.1, 2.2]}, index=[3.3, 4.4])[
lambda x: (2.5 <= x.index) & (x.index < 3.5)
]
print(df)
# Ouput
col1
3.3 1.1
所以 mypy 报告 no issues found
这段代码。
下面一行
pd.DataFrame({"col1": [1.1, 2.2]}, index=[3.3, 4.4])[2.5:3.5]
引发 [2.5
Slice index must be an integer or None
这是有效的语法并且正确returns
col1
3.3 1.1
没有 # type: ignore
,我该如何解决这个 linting 错误?
版本:
- pandas 1.3.0
- mypy 0.931
有问题的代码:
def get_dataframe(
ts_data: GroupTs,
ts_group_name: str,
start_time: Optional[float] = None,
end_time: Optional[float] = None,
) -> pd.DataFrame:
df = pd.DataFrame(ts_data.group[ts_group_name].ts_dict)[
start_time:end_time
].interpolate(
method="index", limit_area="inside"
) # type: pd.DataFrame
return df[~df.index.duplicated()]
我担心现在是 by design,但如果你必须这样做,你可以通过使用可调用的切片来使 mypy 静音,如下所示:
import pandas as pd
df = pd.DataFrame({"col1": [1.1, 2.2]}, index=[3.3, 4.4])[
lambda x: (2.5 <= x.index) & (x.index < 3.5)
]
print(df)
# Ouput
col1
3.3 1.1
所以 mypy 报告 no issues found
这段代码。