检查是否将 DataFrame 或特定字符串文字传递给函数

Check if dataframe or specific string literal was passed to function

提问人:Kalev Maricq 提问时间:10/19/2023 更新时间:10/19/2023 访问量:24

问:

我有一个函数,它接受一个参数,除其他外,该参数可以是数据帧或字符串文字。

def func(could_be_df):
    if could_be_df=='optionA':data=stuffA()
    elif could_be_df=='optionB':data=stuffB()
    else:data=get_data(could_be_df)

当传递数据帧时,这会导致“具有多个元素的数组的真值不明确”错误。我希望df=='optionA'解析为False,因为它显然不是我要找的字符串文字。如何干净地执行此检查?

我试过的东西:

  1. if could_be_df is 'optionA'.语法警告,听起来使用“is”可能不安全。
  2. if isinstance(could_be_df,pd.DataFrame).也可以是系列、数组、列表等。
  3. if isinstance(could_be_df,str).有效,但变得凌乱,因为文字以外的字符串仍应转到get_data。另外,不是鸭子打字。

有没有一种干净的、pythonic的方法来执行此检查?

Python Pandas 平等

评论

0赞 Paul 10/19/2023
方法是instance(could_be_df, pd。DataFrame) 仅当 “could_be_df” 是对象 pd 的实例时才会返回 True。数据帧。因此,它为任何系列、数组、列表返回 False。另外,我认为你不应该过度打字,问问自己是否真的有必要“could_be_df”既可以是字符串,也可以是 DataFrame。

答:

1赞 Timeless 10/19/2023 #1

IIUC 和第三个选项之后,您可以添加一个映射器并检查非文字:

def func(could_be_df):
    options = {"optionA": stuffA(), "optionB": stuffB()}

    if isinstance(could_be_df, str) and could_be_df in options:
        data = options[could_be_df]

    else: # i.e, DataFrames and non Literals
        data = get_data(could_be_df)

    # return data ?