首页 > 解决方案 > 从另一个文件调用 Python 函数并使用该函数的 DF

问题描述

我有一个名为 Pre_processing_File.py 的文件。这个文件预处理一个文本文件(它工作得很好)。

我现在正在做的是我有一个名为naming.py 的单独的.py 文件。在naming.py 文件中,我想调用Pre_processing_File.py 中的函数,然后将预处理后的文件保存为excel 格式。(请参阅下面的当前代码)

import pandas as pd


def naming():
    import Pre_Processing_File
    from Pre_Processing_File import pre_Processing
    
    DormantAcc = pre_Processing(dir1,dir2)
    
naming()

Pre_Processing 文件——我已经把大部分预处理代码都去掉了。此脚本打开一个 GUI,接受 2 个输入文件 dir1 和 dir 2 并从本质上比较它们

from tkinter import *
  
# import filedialog module
from tkinter import filedialog

def pre_Processing(dir1,dir2):
    
    
    ## Import Libraries
    import pandas as pd
    import numpy as np
    from pandas import DataFrame
    
    
    ######################################################################################################################
    ######################################################################################################################
    ## Read in the single long column, and then form a group indicator by seeing where the value is '[User]'. Then separate the 
    ## column labels and values, with a str.split and join back to your DataFrame. Finally pivot to your desired shape.
    
    userListing_DF = pd.read_csv(dir1, sep='\n', header=None)

    userListing_DF['Group'] = userListing_DF[0].eq('[User]').cumsum()
    userListing_DF = userListing_DF[userListing_DF[0].ne('[User]')]  # No longer need these rows

    userListing_DF = pd.concat([userListing_DF, userListing_DF[0].str.split('=', expand=True).rename(columns={0: 'col', 1: 'val'})],
                               axis=1)

    userListing_DF = userListing_DF.pivot(index='Group', columns='col', values='val').rename_axis(columns=None)
    
 
    
    return userListing_DF 

dir1 =  filedialog.askopenfile(mode="r", initialdir="/", title="select file",
                                       filetypes=(("text files", "*.txt"), ("all files", "*.*")))

dir2 = filedialog.askopenfile(mode="rb", initialdir="/", title="Select the second file",
                                       filetypes=(("Excel files", "*.xlsx"), ("all files", "*.*")))

pre_Processing(dir1,dir2)

我遇到的问题是我不确定如何调用在 Pre_processing_File.py 中创建的 df,所以我可以命名它,然后将其保存为 excel。我知道在这种情况下不需要 2 个文件,但是有一种方法可以让我发疯,因此对于这种情况的任何帮助将不胜感激。

标签: pythonpandasfunction

解决方案


您可以制作pre_Processing() return它创建的数据框,然后在其中使用它naming()来获取数据框,例如:

def naming():
from Pre_Processing_File import pre_Processing

    df = pre_Processing(dir1,dir2)

请注意,如果 Pre_processing_File.py 位于 Naming.py 以外的另一个目录中,您将必须dir1dir2分配naming().


推荐阅读