繁体   English   中英

新数据框中的熊猫设置列替换旧数据框

[英]Pandas seting column in new dataframe replace old dataframe

我有两个数据框,我希望基于另一个数据框更新列。 问题是,当我更新列时,旧数据框也将被重写。

(一个数据框包含列和目标变量之间的相关性,另一个数据框应显示排名)

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

哪个返回:

----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保持不变。 如果我打印feat_rank ,则输出正确。 我感觉这与复制数据帧时设置复制与视图有关。

在此行之后:

feat_rank = feat_coef

feat_rank是对feat_coef的引用:

In [9]: feat_rank is feat_coef
Out[9]: True

In [10]: id(feat_rank)
Out[10]: 177476664

In [11]: id(feat_coef)
Out[11]: 177476664

In [12]: id(feat_coef) == id(feat_rank)
Out[12]: True

In [13]: feat_rank['new'] = 100

In [14]: feat_coef
Out[14]:
        Feature_name pearson_koef_FM  new
0  sepal length (cm)         0.72829  100
1   sepal width (cm)        0.684019  100
2  petal length (cm)        0.969955  100
3   petal width (cm)        0.960158  100

因此,如果您更改参考DF feat_rank中的任何现有列(值),则将在源DF feat_coef

解决方案:如果您需要独立的DF,请使用.copy()

feat_rank = feat_coef.copy()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM