在python函数中返回 Dataframe

uajslkp6  于 2023-02-06  发布在  Python
关注(0)|答案(6)|浏览(359)

我尝试通过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未定义。如果我用print替换return,我会正确打印 Dataframe 。有办法做到这一点吗?

ercv8c1e

ercv8c1e1#

当你调用create_df()的时候,Python调用了这个函数,但是没有把结果保存到任何变量中,这就是为什么你会得到这个错误。
create_df()的结果赋给一个新变量df,如下所示:

df = create_df()
df
omqzjyyz

omqzjyyz2#

我在这里有点晚了,但是在函数中创建一个全局变量怎么样?它应该可以为您节省一个步骤。

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的方法。如果需要,它还允许创建多个 Dataframe 。

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

等等。

5fjcxozz

5fjcxozz3#

您可以通过制作 Dataframe 的副本从函数返回 Dataframe ,如下所示

def my_function(dataframe):
  my_df=dataframe.copy()
  my_df=my_df.drop(0)
  return(my_df)

new_df=my_function(old_df)
print(type(new_df))

输出:Pandas.核.帧. Dataframe

u91tlkcl

u91tlkcl4#

函数显式返回两个 Dataframe :

import pandas as pd
import numpy as np

def return_2DF():

    date = pd.date_range('today', periods=20)
    DF1 = pd.DataFrame(np.random.rand(20, 2), index=date, columns=list('xyz'))

    DF2 = pd.DataFrame(np.random.rand(20, 4), index=date, columns='A B C D'.split())

    return DF1, DF2

**调用并返回两个 Dataframe **

one, two = return_2DF()
vsikbqxv

vsikbqxv5#

Dataframe_object.copy()

需要执行深度复制,以避免一个 Dataframe 引用另一个 Dataframe 的问题。当模块(或单独文件)中的函数返回 Dataframe 时,这一点至关重要。如果不返回DataFrame_object.copy(),它将仅返回对函数中创建的 Dataframe 的引用。
如果您在同一个文件中使用函数,那么在函数中使用全局变量时,您甚至可能不会意识到深层复制/浅层复制的问题。

s2j5cfk0

s2j5cfk06#

我以前遇到过这个问题,但是通过在函数外部设置一个变量作为函数的输出,很容易就解决了这个问题。

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

df = create_df()

相关问题