0
私は2つのデータフレームを持っていて、別のデータフレームに基づいて列を更新したいと考えています。問題は、私が列を更新すると、古いデータフレームも同様に書き直されるということです。明らかに新しいデータフレームのPandas設定列が古いデータフレームに置き換わる
----BEFORE----
Feature_name pearson_koef_FM
0 sepal length (cm) 0.72829
1 sepal width (cm) 0.684019
2 petal length (cm) 0.969955
3 petal width (cm) 0.960158
----AFTER----
Feature_name pearson_koef_FM
0 sepal length (cm) 3.0
1 sepal width (cm) 4.0
2 petal length (cm) 1.0
3 petal width (cm) 2.0
、私はfeat_coef
は変わらない期待:
これを返す
がimport numpy as np
import pandas as pd
from scipy.stats import pearsonr
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:100]
y = iris.target[:100]
clmns = iris.feature_names
out = pd.DataFrame(index=np.arange(0,len(clmns)), columns=['coef'])
feat_coef = pd.DataFrame(columns=['Feature_name','pearson_koef_FM'])
feat_coef['Feature_name'] = clmns
feat_rank = feat_coef
X_np = np.array(X)
y_np = np.array(y)
for idx,name in enumerate(clmns):
out['coef'].loc[idx] = pearsonr(X_np[:,idx], y_np)[0]
feat_coef['pearson_koef_FM'] = np.absolute(out['coef'])
print '----BEFORE----'
print feat_coef
feat_rank['pearson_koef_FM'] = feat_coef['pearson_koef_FM'].rank(ascending=False)
print '----AFTER----'
print feat_coef
(一つのデータフレームは、他のランキングを表示するようになっている、列とターゲット変数の間の相関が含まれています) 。 feat_rank
を印刷すると、正しい出力が得られます。私はそれがデータフレームをコピーするときにコピー対ビューを設定することと関係があるように感じる。この行の後
'feat_rank'が、私はそれがこのようなものになります知っていた__reference__ですので、' feat_rank = feat_coef' '' – MaxU
feat_rank = feat_coef.copy()と交換してください:あなたは
.copy()
を使用する独立したDFを必要としています。完璧に動作します!どうしてあなたはどうか説明できますか? – HonzaB