在python函数中返回数据框

新手上路,请多包涵

我正在尝试从 Python 函数创建和返回数据框

def create_df():
    data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
           'year': [2000,2001,2002,2001,2002],
           'pop': [1.5,1.7,3.6,2.4,2.9]}
    df = pd.DataFrame(data)
    return df
create_df()
df

我收到一条错误消息,指出 df 未定义。如果我将 return 替换为 print 我会正确打印数据框。有没有办法做到这一点?

原文由 Manoj Agrawal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
2 个回答

当您调用 create_df() 时,Python 会调用该函数但不会将结果保存在任何变量中。这就是你得到错误的原因。

create_df() 的结果分配给一个新变量 df 像这样:

 df = create_df()
df

原文由 OLIVER.KOO 发布,翻译遵循 CC BY-SA 4.0 许可协议

我来晚了,但是在函数中创建一个全局变量呢?它应该为您节省一步。

 def create_df():

    global df

    data = {
    'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
    'year': [2000,2001,2002,2001,2002],
    'pop': [1.5,1.7,3.6,2.4,2.9]
    }

    df = pd.DataFrame(data)

然后当您运行 create_df() 时,您将能够只使用 df。

当然,如果您有一个大型程序,请注意您的命名策略,以便 df 的值不会随着各种函数的执行而改变。

编辑:我注意到我为此得到了一些分数。这是使用 exec 执行此操作的另一种(可能更糟)方法。如果需要,这还允许创建多个数据帧。

 import pandas as pd

def create_df():
    data = {'state': ['Ohio','Ohio','Ohio','Nevada','Nevada'],
           'year': [2000,2001,2002,2001,2002],
           'pop': [1.5,1.7,3.6,2.4,2.9]}
    df = pd.DataFrame(data)
    return df

### We'll create three dataframes for an example
for i in range(3):
    exec(f'df_{i} = create_df()')

然后,您可以测试它们:

输入: df_0

输出:

     state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

输入: df_1

输出:

     state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

等等。

原文由 Mark Moretto 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进