次のコードを使用して、列見出しがシンボル名として2つのシンボルの終値を含むDataFrameを作成しています。forループを使用してDataFrameを構築する
symbols=['KEL','PAEL']
start_date = '2016-05-01'
end_date = '2017-03-02'
allocation = 50000
def data(symbol):
dates=pd.date_range(start_date,end_date)
df=pd.DataFrame(index=dates)
df_temp=pd.read_csv('/home/furqan/Desktop/python_data/{}.csv'.format(str(symbol)),usecols=['Date','Close'],
parse_dates=True,index_col='Date',na_values=['nan'])
df_temp = df_temp.rename(columns={'Close': symbol})
df=df.join(df_temp)
df=df.fillna(method='ffill')
df=df.fillna(method='bfill')
return df
for symbol in symbols:
df=data(symbol)
pass
print(df)
上記のコードを実行すると、DataFrame内に他の列を作成する代わりに、新しいシンボルが上書きされます。
DataFrame内の新しいシンボルごとに新しい列を作成したい場合は、関数内でforループを使用せずにどのように達成することができますか。
期待outoput:
KEL PAEL
2016-05-01 7.07 61.74
2016-05-02 7.07 61.74
2016-05-03 7.21 62.19
2016-05-04 7.21 62.72
2016-05-05 7.20 64.24
2016-05-06 7.17 63.88
2016-05-07 7.17 63.88
2016-05-08 7.17 63.88
2016-05-09 7.25 64.12
2016-05-10 7.28 65.59
2016-05-11 7.43 65.78
出力私が得た:
PAEL
2016-05-01 61.74
2016-05-02 61.74
2016-05-03 62.19
2016-05-04 62.72
2016-05-05 64.24
2016-05-06 63.88
2016-05-07 63.88
2016-05-08 63.88
2016-05-09 64.12
2016-05-10 65.59
2016-05-11 65.78
ループでは、df = data(symbol)を実行してdfを上書きしています。新しい列を追加するには、df [symbol] = data(symbol)のようなものを試してください。 – Vaishali
@ A-Za-zエラー:NameError:name 'df'が定義されていません –
@FurqanHashimしかし、データフレームオブジェクトを使用する前に、それはPythonのエラーがあなたに伝えているものです。 – Boud