Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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,我有一个熊猫数据框,想用它做不同的事情。现在,我的函数具有以下结构: def process_dataframe(df, save_to_file, print_to_screen, etc): ... if save_to_file: df.to_csv(filename) elif print_to_screen: print df elif... 这是一个丑陋的,如果不是这样的话。我想用一个函数来代替。函数指针。像这样的。我

我有一个熊猫数据框,想用它做不同的事情。现在,我的函数具有以下结构:

def process_dataframe(df, save_to_file, print_to_screen, etc):
    ...
    if save_to_file:
        df.to_csv(filename)
    elif print_to_screen:
        print df
    elif...
这是一个丑陋的,如果不是这样的话。我想用一个函数来代替。函数指针。像这样的。我创建了几个函数:

def save_to_file(df, filename):
    return create_function(to_csv, filename???)
def print_to_screen(df):
    return create_function(print)
这意味着我可以将函数的结构改为这一行:

result = process_dataframe(save_to_file)
...
...
def process_dataframe(df, my_functional):
    return my_functional(df)
问题是我不懂语法。例如,如何在“save_to_file()”中返回类成员函数“.to_csv”?“将_保存到_文件()”看起来如何?需要哪些参数

当然,我可以使用lambda来代替定义每个函数。但我想先了解如何定义函数。在lambdas的下一步,我可以了解自己

问题是我不懂语法。例如,如何 将类成员函数“.to_csv”返回到“save_to_file()”中

我想你问的是:

def save_to_file(filename):
    def df_to_csv(df):
        return df.to_csv(filename)
return df_to_csv
电话:

foo = save_to_file('myfile.csv')
foo(df)  # <- here "df" will be saved to "myfile.csv"
然后这样称呼它:

foo = save_to_file(df, 'myfile.csv')
foo()  # <- "df" is saved to "myfile.csv"
foo=将_保存到_文件(df,'myfile.csv')

foo()#我会确保这确实是您想要做的,但假设是这样,您可以编写一个调用函数(并传递参数)的函数,如下所示:

def process_df(df, function, *args, **kwargs):
    function(df, *args, **kwargs)
定义你的两个动作

def print_to_screen(df):
    print df

def save_to_file(df, filename):
    df.to_csv(filename)
然后,您可以随意使用这些:

In [193]: df = pd.DataFrame([[1,2,3],[2,4,5]], columns=['a','b','c'])

In [197]: process_df(df, print_to_screen)
   a  b  c
0  1  2  3
1  2  4  5

In [198]: process_df(df, save_to_file, 'temp.csv')
#writes temp.csv

重新思考我的方法?当然我基本上想使用一个函数调用,它有时会执行“df.to_csv(filename)”,其他时候执行“print df”,等等。您建议如何解决这个问题?有时我想使用args,有时不想。有时我想为“df”调用成员函数。其他时候只调用普通函数。等等,你没有提供足够的细节让我想出任何“解决方案”。我最初的解决方案可能适合您(如果您只想将所有内容打包到一个函数中,然后选择不带任何参数地调用它),但这似乎是我将要做的事情。好的,您将如何做不同的事情?我已经告诉过您,您需要提供更多关于您想要什么的详细信息,我想对“df”应用一个函数调用。有时该函数将调用“df”的成员函数。有时它只会打印“df”。我不要开关箱。我是一个Python新手,所以我真的不明白我的问题为什么不清楚。由于我所知甚少,我倾向于跳过关键的细节。你需要知道哪些重要的细节?Thanx。正是我想要的。后续问题;有没有更整洁的方法?(想去掉巨大的if-else子句)不清楚为什么你想把所有的东西都放在一个函数中,比如这样或者那样会得到什么。函数“属于”数据帧,所以为什么不直接使用
df.to_csv
等?我想在代码中的不同位置以不同的方式处理数据帧。有时候我想做A,有时候我想做B、C、D等等。我不想在代码中的每个不同位置都有一个if-else子句,我现在只插入一行:“process_df(…)”,多亏了您的帮助。或者我的想法是错误的?我问的是更根本的问题,为什么您需要一个
过程\u df
函数?如果您想在某个时候编写CSV,请使用
df.to_CSV
,如果您想打印,请使用
print df
,等等。将其包装到函数中可以得到什么?我正在进行数据分析。有时我想将数据保存在Excel中以供检查。有时我想阐明数据的另一个方面。每次跑步,我都会检查不同的方面。我一直都在改变方向。我用数据做一些事情,用这种方式看它,用另一种方式看数据,等等。所以我不想要一个大的if-else子句,在我的代码中有各种各样的可能的检查。如果您需要根据您当时的想法随时调用不同的函数,您会如何处理这个问题?
In [193]: df = pd.DataFrame([[1,2,3],[2,4,5]], columns=['a','b','c'])

In [197]: process_df(df, print_to_screen)
   a  b  c
0  1  2  3
1  2  4  5

In [198]: process_df(df, save_to_file, 'temp.csv')
#writes temp.csv