2016-02-27 161 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設置全局變量)。

相關問題