web-dev-qa-db-ja.com

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」に置き換えると、データフレームが正しく印刷されます。これを行う方法はありますか?ありがとう

6
Manoj Agrawal

create_df()を呼び出すと、pythonは関数を呼び出しますが、結果を変数に保存しません。エラーが発生した理由です。

create_df()の結果をdf = create_df()のようにdfに割り当てます

11
OLIVER.KOO

私は少し遅れていますが、関数内でグローバル変数を作成するのはどうですか?それはあなたのためのステップを保存する必要があります。

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

等。

3
Mark Moretto

関数は明示的に2つの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

2つのデータフレームを呼び出して返す

one, two = return_2DF()
0
Ram Prajapati