提问人:Kalev Maricq 提问时间:10/19/2023 更新时间:10/19/2023 访问量:24
检查是否将 DataFrame 或特定字符串文字传递给函数
Check if dataframe or specific string literal was passed to function
问:
我有一个函数,它接受一个参数,除其他外,该参数可以是数据帧或字符串文字。
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,因为它显然不是我要找的字符串文字。如何干净地执行此检查?
我试过的东西:
if could_be_df is 'optionA'
.语法警告,听起来使用“is”可能不安全。if isinstance(could_be_df,pd.DataFrame)
.也可以是系列、数组、列表等。if isinstance(could_be_df,str)
.有效,但变得凌乱,因为文字以外的字符串仍应转到get_data。另外,不是鸭子打字。
有没有一种干净的、pythonic的方法来执行此检查?
答:
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 ?
下一个:求相等系数的所有组合
评论