python2用に書かれたコードをpython3用に書き換えて実行すると、NameError: name 'StringIO' is not defined
のようなエラーが出力される時がある。そういう時は、StringIOをio.StringIOに書き換える必要がある。下記のpython2コードを3用に書き換えることで検証してみる。
1 2 3 4 5 | # load the features to a feature matrix. features = np.loadtxt(StringIO(raw_data), dtype=np.float32, delimiter=',', usecols=(0, 1, 2, 3)) # load the labels to a feature matrix label_converter = lambda s : {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2}[s] labels = np.loadtxt(StringIO(raw_data), dtype=np.int, delimiter=',', usecols=(4,), converters={4: label_converter}) |
コードを修正した後で実行すると以下のようなエラーが出る。
----> 4 label_converter = lambda s : {'Iris-setosa':0, 'Iris-versicolor':1, 'Iris-virginica':2}[s]
5 labels = np.loadtxt(io.StringIO(raw_data), dtype=np.int, delimiter=',', usecols=(4,), converters={4: label_converter})
KeyError: b'Iris-setosa'
5 labels = np.loadtxt(io.StringIO(raw_data), dtype=np.int, delimiter=',', usecols=(4,), converters={4: label_converter})
KeyError: b'Iris-setosa'
このエラーは、b’を以下のようにIris-の前に付け加えてやれば解消する。
1 2 3 4 5 | # load the features to a feature matrix. features = np.loadtxt(io.StringIO(raw_data), dtype=np.float32, delimiter=',', usecols=(0, 1, 2, 3)) # load the labels to a feature matrix label_converter = lambda s : {b'Iris-setosa':0, b'Iris-versicolor':1, b'Iris-virginica':2}[s] labels = np.loadtxt(io.StringIO(raw_data), dtype=np.int, delimiter=',', usecols=(4,), converters={4: label_converter}) |
Pythonプログラミングは、2から3に書き換えることによっても学習できそうな気がしてきた。
スポンサーリンク
スポンサーリンク