Python 围绕我自己创建的函数包装一个pandas函数
我有一个Tweetanalyzer类,有一个dataframe作为instancevariable 现在我想创建一个write_to_csv函数,它可以获取pandas to_csv函数的所有参数 我这样做的原因是我不想调用->Tweetanalyzer.df.to_csv,只想调用TweetAnalyzerZeroObject.write_to_csv,但功能与_csv相同 我想包装函数可能是正确的方法,包括*args和**kwargs,但我无法让它工作Python 围绕我自己创建的函数包装一个pandas函数,python,class,wrapper,Python,Class,Wrapper,我有一个Tweetanalyzer类,有一个dataframe作为instancevariable 现在我想创建一个write_to_csv函数,它可以获取pandas to_csv函数的所有参数 我这样做的原因是我不想调用->Tweetanalyzer.df.to_csv,只想调用TweetAnalyzerZeroObject.write_to_csv,但功能与_csv相同 我想包装函数可能是正确的方法,包括*args和**kwargs,但我无法让它工作 class TweetAnalyzer
class TweetAnalyzer:
def __init__(self, tweets, df = pd.DataFrame({'A' : []})):
self.tweets = tweets
if df.empty:
self.df = self.tweets_to_dataframe(self.tweets)
else:
self.df = df
def write_to_csv(self):
self.df.to_csv()
因此,如果我调用object.write_to_csv(encoding=“utf-8”),它将被解析为to_csv代码,代码将在函数write_to_csv中不指定“encoding”的情况下工作
谢谢你 是的,使用*args和**kwargs可能是正确的想法!大概是这样的:
class TweetAnalyzer:
def __init__(self, tweets, df=pd.DataFrame({"A": []})):
self.tweets = tweets
if df.empty:
self.df = self.tweets_to_dataframe(self.tweets)
else:
self.df = df
def write_to_csv(self, *args, **kwargs):
self.df.to_csv(*args, **kwargs)
有关更全面的解释,请参见:我将避免使用
pd.DataFrame()
作为默认参数,以防它被修改。使用df=None
作为默认值,如果df不是None-else pd.DataFrame…哦,谢谢!我以前用df=None试过,但检查了df==None,如果我用数据帧调用它,解释器告诉我:ValueError:数据帧的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。现在它可以工作了:)把它作为默认参数确实感觉很奇怪。“以防万一”是什么意思?tho?@DustinMichels如果要对默认参数执行df.append(row)
,这是一个就地操作,将反映在类的任何其他实例上,因为默认参数是编译的once@DustinMichels如果您尝试像defa(x=[]):x.附加(1);打印(x)
并调用它两次,您将看到x
变成[1]
,然后[1,1]
非常感谢,这比我想象的要简单!