from pandas import DataFrame, Series
# This function prunes the dataframe rows to those meeting specified criteria
def prune_to_wanted_rows(st_df: DataFrame, recency_date: str) -> DataFrame:
st_df = st_df[ # pyright error message (see below) here
(st_df["assetType"] == "ore")
& (st_df["priceCurrency"] == "USD")
& (st_df["endDate"] >= recency_date)
# other boolean expressions omitted for brevity
]
return st_df
Сообщение об ошибке, все в одной строке, с дефисами, заменяющими некоторые пробелы:
Выражение типа "Series | Unknown | DataFrame" несовместимо с объявленным типом "DataFrame" ------Тип "Series | Unknown | DataFrame" несовместим с типом "DataFrame" ------Тип "Series" является несовместим с «DataFrame»
Я думаю, что это проблема только потому, что сообщение об ошибке уродливо. Я могу подавить это с помощью # pyright: ignore
, и код будет работать так, как задумано. Я (пока) не вижу несовместимости типов, но есть ли смысл в том, что пирайт «правильный»?
Я не вижу никакой несовместимости типов в вашем коде. В любом сценарии я могу подумать, что тип возвращаемого значения df[condition]
(где условием является логический ряд) всегда будет pd.DataFrame
.
Я думаю, что Pyright вызывает эту ошибку, потому что он рассматривает более широкий синтаксис для df[expression]
с выражением, также включающим column label
или slices
, которые возвращают pd.Series
.
Меняем st_df = st_df[
на
st_def = st_df.loc[
предотвращает появление сообщения об ошибке.