Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 围绕我自己创建的函数包装一个pandas函数_Python_Class_Wrapper - Fatal编程技术网

Python 围绕我自己创建的函数包装一个pandas函数

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

我有一个Tweetanalyzer类,有一个dataframe作为instancevariable

现在我想创建一个write_to_csv函数,它可以获取pandas to_csv函数的所有参数

我这样做的原因是我不想调用->Tweetanalyzer.df.to_csv,只想调用TweetAnalyzerZeroObject.write_to_csv,但功能与_csv相同

我想包装函数可能是正确的方法,包括*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):

        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]
非常感谢,这比我想象的要简单!