从函数返回熊猫数据框

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。所以我想我应该把它们都放在同一个文件中?我认为将它们加载到我的变量资源管理器中就足够了 这是给大学的报告,很遗憾我不能。但是,如果我理解你是正确的——函数、数据帧、列表等在同一个文件中,那么它应该没问题?

以上是关于从函数返回熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

熊猫应用函数将多个值返回到熊猫数据框中的行

Python:函数返回的值未在熊猫数据框中更新

从熊猫数据框中选择特定行

如何在熊猫数据框中使用应用时创建列时间戳?

在熊猫数据框中计算速度的函数

如何从 ipywidgets 输出返回熊猫数据框