检查数据帧或特定字符串文字是否已传递给函数

问题描述 投票:0回答:1

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

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 equality
1个回答
0
投票

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 ?
© www.soinside.com 2019 - 2024. All rights reserved.