#python #excel #pandas #dataframe
#python #excel #pandas #фрейм данных
Вопрос:
Я очень новичок в Python, у меня есть две функции func1 и func2, где у меня есть один фрейм данных в каждой функции. Я бы хотел, чтобы df1 из func1 был записан на листе 1, а df2 из func2 был записан в том же Excel, но на листе 2. Я пробовал индивидуальный excelwriter внутри каждой функции, которая записывает записи, но func2 перезаписывает Df1 с помощью Df2, вот почему я пытаюсь получить оба df снаружи и пытаюсь записать один за другим, поэтому у меня также возникают проблемы с вызовом df вне функции. Я не могу отправить запрос моего проекта, вставив образец запроса, любая помощь / предложение будут оценены. К вашему сведению, этот запрос показывает ошибку.
import pandas as pd
def func1():
df1 = pd.DataFrame({'Names': ['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age':[21, 22, 20, 19, 18, 23]})
adf1 = return df1
func1()
def func2(df2):
df2 = pd.DataFrame({'Names': ['Pete', 'Jordan', 'Gustaf',
'Sophie', 'Sally', 'Simone'],
'Age':[22, 21, 19, 19, 29, 21]})
adf2 = return df2
func2()
Filepath='C:/Users/kharikrishnan/xlopt/bb10.xlsx'
writer= pd.ExcelWriter(Filepath)
df1.to_excel(writer,sheet_name='Sheet1',index=False,startrow=0, startcol=0)
df2.to_excel(writer,sheet_name='Sheet2',index=False,startrow=10, startcol=0)
writer.save()
writer.close()
Комментарии:
1. Какая ошибка ? поделитесь этим
2. Кажется, что вы не знакомы с переменными в функции, как получить к ним доступ и как работает возврат в конце функции. Я бы посоветовал вам подробнее изучить это, и вы сами получите свой ответ
3. @j Да, я специалист по хранению данных, пытающийся автоматизировать некоторые тесты в нашем проекте, я новичок в программировании, буду работать над их изучением. Спасибо 🙂
Ответ №1:
Не используйте функции, если вы ничего не делаете с фреймами данных внутри них (как в примере). В этом случае попробуйте это:
df1 = pd.DataFrame({'Names': ['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age':[21, 22, 20, 19, 18, 23]})
df2 = pd.DataFrame({'Names': ['Pete', 'Jordan', 'Gustaf',
'Sophie', 'Sally', 'Simone'],
'Age':[22, 21, 19, 19, 29, 21]})
filepath = 'C:/Users/kharikrishnan/xlopt/bb10.xlsx'
writer = pd.ExcelWriter(filepath)
df1.to_excel(writer,sheet_name='Sheet1',index=False,startrow=0, startcol=0)
df2.to_excel(writer,sheet_name='Sheet2',index=False,startrow=10, startcol=0)
writer.save()
writer.close()
[СОВЕТ] Попробуйте использовать имена в нижнем регистре для переменных (не Filepath
но filepath
). Больше информации о том, как написать хороший код на Python.
Если вы обрабатываете фреймы данных с помощью функций, вам нужно просто return
получить результат. Более того, просто вызывая функции, которые здесь ничего не делают, вы должны присвоить его переменной. Попробуйте это:
import pandas as pd
df1 = pd.DataFrame({'Names': ['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age':[21, 22, 20, 19, 18, 23]})
df2 = pd.DataFrame({'Names': ['Pete', 'Jordan', 'Gustaf',
'Sophie', 'Sally', 'Simone'],
'Age':[22, 21, 19, 19, 29, 21]})
def func1(dataframe):
# some processes using dataframe, i. e. adding new column:
dataframe['new_col'] = ['var1', 'var2', 'var3', ]
return dataframe
def func2(dataframe):
processed_dataframe = <some another processes using dataframe>
return processed_dataframe
new_df1 = func1(df1)
new_df1 = func1(df2)
filepath = 'C:/Users/kharikrishnan/xlopt/bb10.xlsx'
writer = pd.ExcelWriter(filepath)
new_df1.to_excel(writer,sheet_name='Sheet1',index=False,startrow=0, startcol=0)
new_df2.to_excel(writer,sheet_name='Sheet2',index=False,startrow=10, startcol=0)
writer.save()
writer.close()
Я надеюсь, что это поможет вам. Спрашивайте, если вы чего-то не понимаете.
Комментарии:
1. Привет, спасибо за ответ, я последую вашему предложению. Это был всего лишь пример кода, причина, по которой мне нужны две функции, потому что я подключаюсь к двум разным базам данных в этих двух функциях, в каждой функции фрейм данных считывает данные из таблицы и хранит содержимое запроса.. Можете ли вы помочь, например, если у меня есть более двух фреймов данных, возвращающихся из двух функций, и распечатать их в Excel, тем временем я ищу, но если вы можете помочь, это было бы здорово, спасибо 🙂
2. @TheKrish0229, то есть в
function()
:return dataframe1, dataframe2
. Затем:df1, df2 = function()
и вы можете использовать его, как и раньше.
Ответ №2:
Вот как вы извлекаете элемент из метода, просто используйте return
и сохраните его (после вызова метода) в переменной, которую вы можете использовать после
def func1():
return pd.DataFrame({'Names': ['Andreas', 'George', 'Steve',
'Sarah', 'Joanna', 'Hanna'],
'Age': [21, 22, 20, 19, 18, 23]})
def func2():
return pd.DataFrame({'Names': ['Pete', 'Jordan', 'Gustaf',
'Sophie', 'Sally', 'Simone'],
'Age': [22, 21, 19, 19, 29, 21]})
df1 = func1()
df2 = func2()
Filepath = 'C:/Users/kharikrishnan/xlopt/bb10.xlsx'
writer = pd.ExcelWriter(Filepath)
df1.to_excel(writer, sheet_name='Sheet1', index=False, startrow=0, startcol=0)
df2.to_excel(writer, sheet_name='Sheet2', index=False, startrow=10, startcol=0)
writer.save()
writer.close()
Обратите внимание, что здесь df1
записывается на одном листе, а df2
записывается на другом листе с заполнением 10 строк сверху
Комментарии:
1. Нет необходимости использовать функции для простого возврата фреймов данных.
2. @maciejwww: Да, вы правы, это фрагмент, показывающий суть моего требования.
3. @maciejwww конечно, это можно было бы встроить, но если бы я это сделал, это не объяснило бы OP, как использовать возвращенный контент из метода 😉