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」に置き換えると、データフレームが正しく印刷されます。これを行う方法はありますか?ありがとう
create_df()
を呼び出すと、pythonは関数を呼び出しますが、結果を変数に保存しません。エラーが発生した理由です。
create_df()
の結果をdf = create_df()
のようにdf
に割り当てます
私は少し遅れていますが、関数内でグローバル変数を作成するのはどうですか?それはあなたのためのステップを保存する必要があります。
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
等。
関数は明示的に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()