2016-02-27 2 views
-2

Я использую две функции: одну для загрузки данных и другую, чтобы получить сводку с теми же данными. Однако во второй функции analysis() я получаю ошибку df, не определенную. Как передать df из loader() для анализа()?передать кадр данных из одной функции в другую в 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

Я не вижу, что вы используете 'анализ()'. – zondo

+0

Возможно, вы можете начать с возвращения 'df' из' Loader'? – idjaw

+0

Я буду называть функцию анализа из Excel с помощью xlwings –

ответ

1

С несколькими способами в зависимости от того, что вы хотите сделать. Самый простой способ заключается в return в df от Loader(), а затем передать его 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).

Смежные вопросы