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