Pythonのfor文に数値を代入したい
Python初心者です。うまくコードが書けなくて困っています。
import pandas as pd
totalcol2008 = mig2008.ix[:].sum(axis=0)
totalcol2008 = pd.DataFrame([totalcol2008])
totalcol2008 = totalcol2008.T
という処理を2008,2009、2010のデータに対してしたいと思っています。
そこで、
def foo(nen):
nenrange = [2008,2009,2010]
for nen in xrange(nenrange):
totalcol%s = mig%s.ix[:].sum(axis=0) nen
totalcol%s = pd.DataFrame([totalcol%s]) nen
totalcol%s = totalcol%s.T nen
というコードを書きましたが totalcol%sの部分にエラーが出てしまいます。
イテレータを使ったり年数の所を+1したりするアルゴリズムは思いつくのですが
肝心の代入が出来なくて困っています。
どう対応すれば良いのでしょうか?
追記
上記のコードは無事回りました。ありがとうございます。
ですが、少々改造すると動かなくなりました。
おそらく辞書の中にデータフレームを保持できていない(2行なので)?からでしょうか。
また、
out = "out" + str(nen)
inn = "in" + str(nen)
total.columns = [out,inn]
も怪しいです。わかる方ヘルプお願い致します。
以下コードです。
def foo(mig):
totalcol = mig.ix[:].sum(axis=0)
totalcol = pd.DataFrame([totalcol])
totalcol = totalcol.T
totalrow = mig.ix[:].sum(axis=1)
totalrow = pd.DataFrame([totalrow])
totalrow = totalrow.T
total = pd.concat([totalrow,totalcol],axis=1)
total.index = caproman
nen = mig.keys()
out = "out" + str(nen)
inn = "in" + str(nen)
total.columns = [out,inn]
return total
migs = {2008: mig2008, 2009: mig2009, 2010: mig2010}
total = {}
for year, mig in migs.items():
total[year] = foo(mig)
total08 = total[2008]
total09 = total[2008]
total10 = total[2008]
totalio = pd.concat([total08,total09,total10],axis=1)
さらに追記
caproman
はcolumnやrowに入れる名前のリストです。上できちんと定義されています。その下でやりたいのは2008~2010年のデータを入力数と出力数の和を出してそれぞれにout2008, in2008などと列名をつけ08~10年の各都道府県のデータをconcatして出力したいです。
きちんとした形で説明せず混乱を招いて申し訳ございません。
実行結果
def foo
...
total={}
まではエラーなく通り、その下の
for year, mig in migs.items():
total[year] = foo(mig)
を実行すると
ValueError: Length mismatch: Expected axis has 94 elements, new values have 47 elements
となります。totalrowとtotalcolがどちらも縦長になっていることは関数の中身のみを実行して確認しているのですが…