Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:代表一切的函数默认输入_Python_Pandas - Fatal编程技术网

Python:代表一切的函数默认输入

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

python中有代表一切的变量吗

我有一个名为filter的函数:

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的字符串!