Python:代表一切的函数默认输入
python中有代表一切的变量吗 我有一个名为filter的函数:Python:代表一切的函数默认输入,python,pandas,Python,Pandas,python中有代表一切的变量吗 我有一个名为filter的函数: def filter(df, col1 = ?, col2 = ?, col3 = ?): return df.loc[(df.col1 == col1) & (df.col2 == col2) & (df.col3 = col3),:] 你应该做什么?是 ===================== 期望输出: 如果代码是filter(df),那么程序返回整个数据帧 如果代码是filter(df,co
def filter(df, col1 = ?, col2 = ?, col3 = ?):
return df.loc[(df.col1 == col1) & (df.col2 == col2) & (df.col3 = col3),:]
你应该做什么?是
=====================
期望输出:
如果代码是filter(df),那么程序返回整个数据帧
如果代码是filter(df,col1='N'),则程序返回一个子数据帧,其中col1中的值为'N'。(忽略col2和col3的约束)
如果代码是filter(df,col1='N',col3='S'),则程序返回一个子数据帧,其中col1='N'和col3='S'中的值。(忽略col2的约束)
=====================
有没有一种简单的方法来代替多个if语句?可能有一种更优雅的方法,但在我的脑海中,你可以使用以下方法:
def my_filter(df, **kwargs):
for column in kwargs:
filter_value = kwargs[column]
df = df.loc[df[column] == filter_value, ]
return df
filtered_df = my_filter(df, col1='N', col2='S')
也许有一种更优雅的方式,但在我的脑海中,你可以使用以下方式:
def my_filter(df, **kwargs):
for column in kwargs:
filter_value = kwargs[column]
df = df.loc[df[column] == filter_value, ]
return df
filtered_df = my_filter(df, col1='N', col2='S')
根据这些列中的数据类型,可以执行以下操作:
def filter(df, col1s='', col2s='', col3s=''):
return df.loc[df.col1.str.contains(col1s) & df.col2.str.contains(col2s) & df.col3.str.contains(col3s)]
从空字符串的默认参数开始,当传递到.str.contains()
时,将返回任何内容,您不会对未提供的列进行筛选
当然,这假设使用
str.contains()
将从数据中返回与=
相同的样本。(猜测您的'N',S'
1长度字符串是可以的,但如果有更复杂的字符串,我们将不得不探索其他选项)。根据这些列中的数据类型,您可以执行以下操作:
def filter(df, col1s='', col2s='', col3s=''):
return df.loc[df.col1.str.contains(col1s) & df.col2.str.contains(col2s) & df.col3.str.contains(col3s)]
从空字符串的默认参数开始,当传递到.str.contains()
时,将返回任何内容,您不会对未提供的列进行筛选
当然,这假设使用
str.contains()
将从数据中返回与=
相同的样本。(猜测您的'N',S'
1长度字符串是可以的,但如果有更复杂的字符串,我们将不得不探索其他选项)。谢谢!它起作用了!我学到了一些新东西!我以前不知道**kwargs!谢谢它起作用了!我学到了一些新东西!我以前不知道**kwargs!那真的很有帮助!数据都是长度为1的字符串!那真的很有帮助!数据都是长度为1的字符串!