pandas.MultiIndex.from_product実行時にTypeError: Input must be list-like

pandasのドキュメントとソースコードを読んで解決したけど、つまったのでメモ。
しょーもないことだが。

ちなみに、何故詰まったのかというと、変更した記憶がないのに動かなくなってしまったから。
開発環境を壊してしまい、ライブラリなどを更新したことが原因だと推測されるが、いまとなっては分からないので。
解決したので、そこまで調べる気もないのだが。

さて、問題のソースは下記。これが動かなくなった。
※)正確には、元々こう書いていたかは覚えていない。でも、たぶんそうだったという記憶に基いているw。

ku.columns = pd.MultiIndex.from_product(['ku', ku.columns])

エラーメッセージは下記。

File "D:/dev_git/Indicators.py", line 26, in getKuChart
ku.columns = pd.MultiIndex.from_product(['ku', ku.columns])
File "C:\Python\Python27\site-packages\pandas\indexes\multi.py", line 1024, in from_product
labels, levels = _factorize_from_iterables(iterables)
File "C:\Python27\site-packages\pandas\core\categorical.py", line 2068, in _factorize_from_iterables
return map(list, lzip(*[_factorize_from_iterable(it) for it in iterables]))
File "C:\Python27\site-packages\pandas\core\categorical.py", line 2030, in _factorize_from_iterable
raise TypeError("Input must be list-like")
TypeError: Input must be list-like

もともと「バックテストを試してみました」を参考にして自分で手を加えて作成したもの。
開発環境を壊すまでは動いていた。

pandasのソースを追っていくとcategorical.pyの下記で例外をスローしている。

def _factorize_from_iterable(values):
   from pandas.indexes.category import CategoricalIndex

    if not is_list_like(values):
        raise TypeError("Input must be list-like")

・・・・・・・・・・・

エラーメッセージからも想像がつくが、is_list_like(values)でvaluesがリスト形式であるかをチェックしているのでvaluesがリスト形式ではないということ。実際にデバッグすると「pd.MultiIndex.from_product(['ku', ku.columns])」で与えたリスト['ku', ku.columns]の最初の要素'ku'がvaluesに入ってきたところでエラーとなっていた。
次のように、文字列'ku'をリスト形式にして解決。

ku.columns = pd.MultiIndex.from_product([['ku'], ku.columns])

とりあえず、「pandas 0.18.1 documentation » API Reference »」と「pandas 0.19.1 documentation » API Reference » pandas.MultiIndex」は比較したが、ここの仕様に変更はなさそう。

うーん、元々自分で修正していたのかな。今となっては覚えていない。