Перебор файлов и прохождение каждого через функцию - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь построить бюджетный калькулятор, чтобы попрактиковаться в питоне. В данный момент я пытаюсь перебрать файлы в каталоге, а затем передать каждый файл через функцию для извлечения необходимых мне данных в DataFrame (готовый для выполнения вычислений на нем).

Мне удалось создать функцию для очистки данных и цикл for для перебора файлов. Однако я не могу понять, как добавлять DataFrame для каждой итерации.

#Where to look
os.chdir(r"C:\relevant\directory")
cwd = os.getcwd()

#key variables
main_df = pd.DataFrame()
pay_slip = {}
master_df = pd.DataFrame()

#Iterate over files
for file in os.listdir():
    slip_content = read_pdf(file)
    pay_slip[file] = slip_content

#Data clean up function
def get_key_info(pay_slip):
    read_dictionary = pay_slip.get(file)
    salary_str = read_dictionary["Employee"].iloc[2]
    pay_after_tax_str = read_dictionary["Tax Period"].iloc[14]
    date_format = read_dictionary["Pay Date"].iloc[0]
    salary = int(float(salary_str[1:].replace(",", "")))
    pay = int(float(pay_after_tax_str[1:].replace(",", "")))
    deductions = (salary - pay)
    df = pd.DataFrame([
        [date_format, salary, pay, deductions]
        ],
        columns=["Payment date", "Salary before tax", "take home pay", "total deductions"])
    return df

print(get_key_info(pay_slip))

Когда я запускаю этот код, в DataFrame добавляется только один из файлов вместо всех файлов, как и должно быть.

Заранее благодарен за любую помощь

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Спасибо за помощь, Флориан, я исправил это зацикливание в моем каталоге, как вы сказали.

Однако мне не удалось зациклить словарь, так как он не хэш.

Я опубликую свой код ниже на случай, если у кого-то еще возникнет та же проблема, что и у меня.

    #Where to look
os.chdir(r"C:\relevant\directory")
cwd = os.getcwd()

#key variables
master_df = pd.DataFrame()


#Data clean up function
def get_key_info(x):
    salary_str = get_data["Employee"].iloc[2]
    pay_after_tax_str = get_data["Tax Period"].iloc[14]
    date_format = get_data["Pay Date"].iloc[0]
    salary = int(float(salary_str[1:].replace(",", "")))
    pay = int(float(pay_after_tax_str[1:].replace(",", "")))
    deductions = (salary - pay)
    df = pd.DataFrame([
        [date_format, salary, pay, deductions]
        ],
        columns=["Payment date", "Salary before tax", "take home pay", "total deductions"])
    return df

#Iterate over files
for f in os.listdir():
    get_data = read_pdf(f)
    master_df = master_df.append(get_key_info(f), ignore_index = True)

print(master_df)

Здесь я установил переменную get_data для изменения каждой итерации цикла for, которая затем.append() the master_df

0 голосов
/ 13 октября 2019

Вы не зацикливаетесь на словаре pay_slip.


for file in os.listdir(): 
    slip_content = read_pdf(file) 
    pay_slip[file] = slip_content 

#Data clean up function
def get_key_info(pay_slip): 
    read_dictionary = pay_slip.get(file) #<= where is file variable assign?

...