2017-11-20 13 views
0

配列に3つの文字列があります。私はまた、0-2の値の列を持つデータフレームを持っています。私はリスト[x]を評価した結果を新しい列に追加したいと考えています。リストから値を含む列を追加する

は、これまでのところ、私は以下のコードがあります。

import pandas as pd 
import numpy as np 

from sklearn import datasets 

iris_raw = datasets.load_iris() 
iris = pd.DataFrame(iris_raw.data, columns=iris_raw.feature_names) 

iris = pd.concat([iris, pd.DataFrame(iris_raw.target)], axis = 1) 

vals = iris_raw.target_names 

def eval_dummy(tgt_dum): 
    default = np.nan 
    return(iris_raw.target_names[tgt_dum] if 0 <= tgt_dum <= len(vals) else default) 

vec_eval_dumm = np.vectorize(eval_dummy) 

iris = pd.concat([iris, pd.DataFrame(vec_eval_dumm(np.array(iris.iloc[:, 4])))], axis = 1) 

iris.columns.values[5] = 'species' 

print(iris.head()) 

これはかなりほど遠いですが、これを行うには良い方法はありますか?

  • 虹彩データセットで問題を再現しましたので、私がしようとしていることを見るためにコードを実行してください。
  • 当然私はこれをグーグルで試してみたが、私はあなたがターゲット名にmapの整数をしたいように見えます「変数評価」

答えて

1

のようなフレーズを使用して適切なものを見つけていませんよ?

# NumPy rather than pandas concatenation might be a bit quicker 
iris = np.concatenate((iris_raw.data, iris_raw.target[:, None]), axis=1) 
iris = pd.DataFrame(iris, columns=iris_raw.feature_names + ['tgt_num']) 
mapped = dict(zip([0, 1, 2], iris_raw.target_names)) 
iris.loc[:, 'species'] = iris.tgt_num.map(mapped) 

print(iris) 
# sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \ 
# 0    5.1    3.5    1.4    0.2 
# 1    4.9    3.0    1.4    0.2 
# 2    4.7    3.2    1.3    0.2 
# 3    4.6    3.1    1.5    0.2 
# 4    5.0    3.6    1.4    0.2 
# 
# tgt_num species 
# 0  0.0 setosa 
# 1  0.0 setosa 
# 2  0.0 setosa 
# 3  0.0 setosa 
# 4  0.0 setosa 
+1

これは本当に素晴らしい応答です – User632716

関連する問題