从函数返回熊猫数据框
Posted
技术标签:
【中文标题】从函数返回熊猫数据框【英文标题】:return pandas dataframe from function 【发布时间】:2022-01-21 01:33:26 【问题描述】:我想从这个函数返回一个数据框,它可以在其他地方使用(准确的绘图)。
我的想法是使用我可以通过points_sum()
创建的数据框,将其保存为团队名称,然后在我的px.line(dataframe = team_name)
中使用该数据框。
本质上,我想在创建 men_points_df
变量后使用它。
def points_sum(team):
points = 0
men_points = []
for index, row in menscore_df.iterrows():
if row['hometeam'] == team:
if row['homegoals'] > row['awaygoals']:
points += 2
elif row['homegoals'] == row['awaygoals']:
points += 1
elif row['homegoals'] < row['awaygoals']:
points == points
date = str(row['date'])
men_points.append([date, points])
if row['awayteam'] == team:
if row['homegoals'] < row['awaygoals']:
points += 2
elif row['homegoals'] == row['awaygoals']:
points += 1
elif row['homegoals'] > row['awaygoals']:
points == points
date = str(row['date'])
men_points.append([date, points])
men_points_df = pd.DataFrame(men_points, columns = ["Date", 'Points'])
return men_points_df
在 plotly 中,我正在尝试使用我的新数据框 (men_points_df
),如下所示,但我收到错误 undefined name
,即使我可以打印它(例如:test = points_sum("FIF")
(FIF
是团队名称之一)并在控制台中显示正确的数据框(当我输入 test
时):
elif pathname == "/page-3":
return [html.H1('Seasonal performance',
style='textAlign':'center'),
html.Div(
children=[
html.H2('Select team',style='textAlign':'center'),
html.Br(),
html.Br(),
dcc.Dropdown(
id='team_dd',
options=['label': v, 'value': k for k,v in teams_all.items()],
)]),
dcc.Graph(id="performance_graph")
]
Output(component_id="performance_graph", component_property="figure"),
Input(component_id="team_dd", component_property="value")
def update_graph(option_selected):
title = "none selected"
if option_selected:
title = option_selected
line_fig = px.line(
test, # <------------ THIS IS THE ISSUE
title = f"title",
x = "Date", y = "Points")
return line_fig
【问题讨论】:
错误是什么? 我顺便看过这篇文章:***.com/questions/45579525/…,但我不知道是什么:将 create_df() 的结果分配给 df,像这样 df = create_df(),我应该在哪里这样做,所以我会工作 那么您是否只是在创建men_points_df
变量后尝试使用它?
当我尝试使用数据框时,错误实际上发生了。当我说: test = points_sum("FIF") (其中一个团队)时,我得到了一个正确的数据框,但是当我尝试在情节中使用它时,它说“未定义”,即使我可以打印正确的结果控制台
完全正确。顺便说一句,使用蜘蛛 IDE,如果感兴趣的话
【参考方案1】:
只需在update_graph
函数中调用points_sum
,然后再使用test
:
def update_graph(option_selected):
title = "none selected"
if option_selected:
title = option_selected
# vvv Here vvv
test = points_sum("FIF")
line_fig = px.line(
test, #THIS IS THE ISSUE
title = f"title",
x = "Date", y = "Points")
return line_fig
【讨论】:
它稍微好一点,但现在我得到了以下内容: Undefined name "points_sum", on: test = points_sum("FIF")points_sum
是否定义在同一个文件中?
如果您可以将整个文件上传到某个地方以便我看一下,那将非常有帮助。喜欢 pastebin 或 GitHub gist。
不,不是。但我知道你要去哪里。当我将 points_sum 插入该文件时,我得到一个新的未定义名称,用于我的 menscore_df。所以我想我应该把它们都放在同一个文件中?我认为将它们加载到我的变量资源管理器中就足够了
这是给大学的报告,很遗憾我不能。但是,如果我理解你是正确的——函数、数据帧、列表等在同一个文件中,那么它应该没问题?以上是关于从函数返回熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章