pandas dataframeのカラムヘッダをすべて小文字にするにはどうしたらいいですか?

pandasデータフレームの列ヘッダをすべて小文字にしたい

があれば

data =

  country country isocode  year     XRAT          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
....

というような感じでXRATをxratに変更したいと思います。

data.headers.lowercase()

得られるように。

  country country isocode  year     xrat          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
3  Canada             CAN  2004  1.30102  1096000.35500
....

各カラムヘッダの名前は、先にはわかりません。

ソリューション

こんな風にできるんですね。

data.columns = map(str.lower, data.columns)

または

data.columns = [x.lower() for x in data.columns]

の例です。

>>> data = pd.DataFrame({'A':range(3), 'B':range(3,0,-1), 'C':list('abc')})
>>> data
   A  B  C
0  0  3  a
1  1  2  b
2  2  1  c
>>> data.columns = map(str.lower, data.columns)
>>> data
   a  b  c
0  0  3  a
1  1  2  b
2  2  1  c
解説 (3)

columnsに [str.lower`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.lower.html) を使えば、簡単にできますね。

df.columns = df.columns.str.lower()

In [63]: df
Out[63]: 
  country country isocode  year     XRAT         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

In [64]: df.columns = df.columns.str.lower()

In [65]: df
Out[65]: 
  country country isocode  year     xrat         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06
解説 (0)

連鎖したメソッド呼び出しでリネームを行いたい場合は

data.rename(
    columns=unicode.lower
)

(Python 2)

または

data.rename(
    columns=str.lower
)

(Python 3)

解説 (0)