#python #matplotlib
Вопрос:
В настоящее время я работаю над функцией, которая return
создает фрейм данных, но также содержит график matplotlib. Это выглядит примерно так:
import pandas as pd
import matplotlib.pyplot as plt
def function(n):
df = pd.DataFrame(columns=['a','b','c'])
df['a'] = np.random.randn(n)
df['b'] = np.random.randn(n)*2
df['c'] = np.random.randn(n)*3
plt.plot(df.a,color='red')
plt.plot(df.b,color='green')
plt.plot(df.c,color='blue')
return(df)
function(100)
Проблема в том, что эта функция (по крайней мере, в Jupyter) выводит как график, так и кадр данных. Я хотел бы использовать фрейм данных ( df
) в качестве входных данных в другой функции, и мне не удалось успешно извлечь только фрейм данных для этой цели.
Я попытался использовать функцию(100)[0] и несколько ее вариаций, но безуспешно.
Я также понял, что размещение return(df)
блока над plt.plot
строками вернет только кадр данных, но не график, и я хотел бы, чтобы оба (кадр данных И график) отображались в выходной ячейке при вызове function
.
Любая помощь будет признательна!
Ответ №1:
Вы можете изменить свою функцию, чтобы иметь возможность не создавать график:
def function(n, plot=True):
df = pd.DataFrame(columns=['a','b','c'])
df['a'] = np.random.randn(n)
df['b'] = np.random.randn(n)*2
df['c'] = np.random.randn(n)*3
if plot:
plt.plot(df.a,color='red')
plt.plot(df.b,color='green')
plt.plot(df.c,color='blue')
return(df)
Затем:
>>> function(n)
# plot output
>>> function(n, plot=False)
# output only
ПРИМЕЧАНИЕ. используйте def function(n, plot=False):
, чтобы по умолчанию он не отображался
Ответ №2:
Вам нужно только добавить переменную, чтобы сохранить то, что возвращается функцией.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def function(n):
df = pd.DataFrame(columns=['a','b','c'])
df['a'] = np.random.randn(n)
df['b'] = np.random.randn(n)*2
df['c'] = np.random.randn(n)*3
plt.plot(df.a,color='red')
plt.plot(df.b,color='green')
plt.plot(df.c,color='blue')
return(df)
new_df = function(10)
тогда new_df здесь только df.
Ответ №3:
Return
заявление также позволяет диктовать.
return {
'my_df':df,
'my_plot': plt.plot
}
Затем вы можете получить доступ к содержимому с помощью:
function_= function(100)
returned_df = function_['my_df']
returned_plot = function_['my_plot']