Добавьте 2 файла данных в pyinstaller и используйте их в качестве переменных в функции, написанной в скрипте - PullRequest
0 голосов
/ 10 февраля 2020

Моя цель - создать один исполняемый файл, используя pyinstaller, преобразовав файл .py или .ipynb. Я хотел бы, чтобы пользователь вводил свой путь к файлу Excel (2 файла), когда он запускает исполняемый файл на своем компьютере. Затем исполняемый файл должен выполнить мой написанный python код, который принимает их файлы данных, введенные в качестве аргументов моей функции, для целей манипулирования данными и возвращает вывод моей функции (манипулированный файл csv) конечному пользователю, использующему это приложение.

def manipulated_data(df,df5,df10):
    df2=df.copy()


    df4=df2.pivot_table(columns=df2[df2.columns[6]],index=df2[np.r_[df2.columns[0:6],df2.columns[9:17],df2.columns[18:]]],values=df2[df2.columns[7:9]],fill_value='')

    df4=df4.reset_index()

    #Combining multi-index names
    df4.columns = [' '.join(col).strip() for col in df4.columns.values]




    df7=df5.melt(id_vars=df5[df5.columns[0:5]],value_vars=df5[df5.columns[6:15]],value_name='Values')

    df7=df7.replace('Zone 9`','Zone 9')

    ind=df7.variable.unique()

    df8=df7.pivot_table(columns=df7[df7.columns[4:6]],
                    index=df7[df7.columns[0:4]]
                    , values=df7.columns[6],aggfunc=('first'),fill_value='')

    df8=df8.reindex(ind,axis=1,level=1)

    df8.columns = [' '.join(col).strip() for col in df8.columns.values]

    df8.reset_index(inplace=True)

    df9=pd.merge(df4,df8,how='inner',on=['Store ID','Store Name','State'])

    df9.fillna('',inplace=True)

    dfcoles=pd.concat([df9,df10], axis=0,ignore_index=False,sort=False)

    dfcoles.fillna('',inplace=True)

    coles_ind=df10.columns

    dfcoles=dfcoles.reindex(coles_ind,axis=1)

    return dfcoles

df_trial=pd.read_csv('C:/Users/Abdul.Qavi/Downloads/Day 14 data/Part 3.csv',keep_default_na=False)

df_part4=pd.read_csv('C:/Users/Abdul.Qavi/Downloads/Day 14 data/Part 4.csv',keep_default_na=False)

df_coles=pd.read_csv('C:/Users/Abdul.Qavi/Downloads/Coles Service SF.csv',keep_default_na=False)
 ##This file wouldn't be entered by the user. It would always be a part of the script.

dfx=manipulated_data(df_trial,df_part4,df_coles)

1 Ответ

0 голосов
/ 11 февраля 2020

Исходя из моего понимания вопроса

  • вы хотите, чтобы пользователь ввел путь для 2 CSV-файлов
  • , прочитал файлы и передал его в качестве аргумента
  • выполнить некоторые операции, используя функцию managedulated_data ()
  • вернуть / сохранить вывод - скажем, в формате файла CSV.

Общая версия будет выглядеть следующим образом -

app.py

import pandas as pd
import os

def manipulated_data(df1,df2):
    #perform operations using df1 and df2
    #......
    #......
    #for example - 
    df_coles = pd.concat([df1,df2], axis=0,ignore_index=False,sort=False) 
    return df_coles

# get file paths from the user
path1 = input("enter path for the 1st file")
path2 = input("enter path for the 2nd file")

#read the csv files
data1 = pd.read_csv(path1)
data2 = pd.read_csv(path2)

#execute manipulated_data() function-
df_final = manipulated_data(data1,data2)

#create an output directory
if not os.path.exists('output'):
    os.makedirs('output')

#save csv file in the output directory or your prefered location
df_final.to_csv('./output/manipulated_data1.csv') 

# Open excel to display the csv file
os.system("start excel output/manipulated_data1.csv")

# To prevent the app from closing abruptly -
input("Press enter to continue...")

А затем создайте приложение -

pyinstaller app.py

Примечание: вы можете использовать os.getcwd () для чтения файлов или сохранения файла в текущий каталог.

...