2016-02-27 162 views
-2

我正在使用两个函数,一个用于加载数据,另一个用于获取相同数据的摘要。然而,在第二个函数analyze()中,我得到了未定义的错误df。如何将df从loader()传递给analyze()?在Python中将数据帧从一个函数传递到另一个函数

from xlwings import Workbook, Range 
import pandas as pd 

def Loader(): 
     wb = Workbook.caller() 
     file_path = Range(1,(1,1)).value 
     file=pd.read_excel(file_path, sheetname='Sheet1') 
     df = pd.DataFrame(file)  

def analyze(): 
     Range('C1').value=df.describe() 
+4

我没有看到你使用'analyze()'。 – zondo

+0

也许你可以从'Loader'返回'df'开始? – idjaw

+0

我将使用xlwings从Excel中调用分析函数 –

回答

1

有几种方法取决于你想做什么。最简单的方法是从Loader()returndf,然后把它交给analyze()作为参数:

def Loader(): 
    wb = Workbook.caller() 
    file_path = Range(1,(1,1)).value 
    file=pd.read_excel(file_path, sheetname='Sheet1') 
    df = pd.DataFrame(file) 
    return df 

def analyze(df): 
    Range('C1').value=df.describe() 

# Use it this way 
dataFrame = Loader() 
analyze(dataframe) 

然后另一种方法是有一个Loader类是这样的:

class Loader(object): 
    def __init__(self): 
     wb = Workbook.caller() 
     file_path = Range(1,(1,1)).value 
     file=pd.read_excel(file_path, sheetname='Sheet1') 
     self.df = pd.DataFrame(file) 

     # 1) If you want to analyse when you create the object 
     # call analyze() here 
     self.analyze() 

    def analyze(self): 
     Range('C1').value=self.df.describe() 

    loader = Loader() 
    # 2) Otherwise you can keep control of analyze() 
    # and call it whenever you want, like this: 
    loader.analyze() 

当然还有其他方法(比如为df设置全局变量)。

相关问题