Объединение нескольких функций в одну в python

#python #excel #pandas #csv

Вопрос:

Я создал 3 функции для импорта данных из .csv файла, а затем взял определенный столбец, чтобы затем суммировать данные внутри столбца. Я хочу экспортировать все три dataFrame s из каждой соответствующей функции в один .xlsx файл. Если я буду запускать функции одну за другой, они будут перекрываться, и только последняя функция будет экспортирована в .xlsx файл. Как мне экспортировать все три функции одновременно, чтобы в .xlsx файле были все три экспорта? P.S это моя вторая неделя python, это может быть очень любительский вопрос. Спасибо.

  import pandas as pd


def file1(file_name_one):
    importing = pd.read_csv(file_name_one)
    df1 = pd.DataFrame(data={'Net Sales':[importing['Net Sales'].sum()]})
      df1.to_excel('excelfile.xlsx',
             index=False,
             header=False,
             startrow=5,
             startcol=3,
             )

def file2(file_name_two):
    importing2 = pd.read_csv(file_name_two)
    df2 = pd.DataFrame(data={'Net Sales':[importing2['Net Sales'].sum()]})
      df2.to_excel('excelfile.xlsx',
             index=False,
             header=False,
             startrow=6,
             startcol=3,
             )

def file3(file_name_three):
    importing3 = pd.read_csv(file_name_three)
    df3 = pd.DataFrame(data={'Amount':[importing3['Amount'].sum()]})
      df3.to_excel('excelfile.xlsx',
             index=False,
             header=False,
             startrow=7,
             startcol=3,
             )

print(file1(r"example1.csv"))
print(file2(r"example2.csv"))
print(file3(r"example3.csv"))

#this will result only in the export of file3(), 
#the other 2 functions get "overlapped", how do I also export the other two functions? 
 

Комментарии:

1. Что вы пробовали для себя? Переопределение базовой сигнатуры метода для включения столбца в качестве параметра может вызвать проблемы. это уже хорошее начало.

2. Сигнатура метода — это комбинация имени метода и его параметров. Поэтому перейдите к чему-то вроде «определить ваш_новой_метод (file1, file2, file3)».

3. Это как объединить 3 функции в одну функцию? не могли бы вы объяснить подробнее?

4. Это был бы способ объединить действительно. Это базовый python. Возможно, сначала просто проверьте, как работают функции ( datacamp.com/community/tutorials/functions-python-tutorial )

5. Я хорошо знаком с материалами, содержащимися в прикрепленной вами ссылке, но как я могу применить «def your_new_method (file1, file2, file3)», в мой скрипт? большое спасибо.

Ответ №1:

Исходя из того, что я понимаю, вы хотите, чтобы 3 фрейма данных были сохранены в одном файле Excel.

Проблема с вашим кодом заключается в том, что вы переписываете данные на одном листе. Вместо этого вы можете сохранить каждый фрейм данных в его выигранном листе следующим образом:

 df1.to_excel('excelfile.xlsx', sheet_name='df1' ...

df1.to_excel('excelfile.xlsx', sheet_name='df1' ...

df3.to_excel('excelfile.xlsx', sheet_name='df3' ...
 

Ответ №2:

Итак, теоретически:

 def handle_files(file_net1, file_net2, file_amount):
    net1 = pd.read_csv(file_net1)
    net2 = pd.read_csv(file_net2)
    amount = pd.read_csv(file_amount)
    df1 = pd.DataFrame(data={'Net Sales':[net1['Net Sales'].sum()]})
    df2 = pd.DataFrame(data={'Net Sales':[net2['Net Sales'].sum()]})
    df3 = pd.DataFrame(data={'Amount':[amount['Amount'].sum()]})
    df1.to_excel('excelfile.xlsx',
             sheet=NetResult1
             index=False,
             header=False,
             startrow=7,
             startcol=3,
             )
    df2.to_excel('excelfile.xlsx',
             sheet=NetResult2
             index=False,
             header=False,
             startrow=7,
             startcol=3,
             )
    df3.to_excel('excelfile.xlsx',
             sheet=Amount
             index=False,
             header=False,
             startrow=7,
             startcol=3,
             )
 

Должен ли сделать трюк правильно?

Поток и вызов должны быть:

 handle_files(example1.csv, example2.csv, example3.csv)
 

Кстати: я также включил сюда ответы @Gangula с разными листами.