我正在使用带有一些微阵列的 sklearn 和 Pandas,并且我有一个 Pandas DataFrame,其中每一列都已命名。所以我正在对数据框做一些转换,本质上是特征选择。data = pd.read_csv("data.txt")print(data)导致 1007_s_at 1053_at ... AFFX-TrpnX-5_at AFFX-TrpnX-M_at0 3.96932 2.52634 ... 2.09691 1.991231 4.10452 2.43457 ... 2.28103 2.064462 3.95308 2.36736 ... 2.11059 1.806183 3.99712 2.55388 ... 2.13354 1.919084 3.95279 2.21484 ... 2.22531 2.03342.. ... ... ... ... ...96 3.79560 2.74194 ... 2.01703 2.0374397 3.79817 2.47422 ... 2.12385 2.0718898 3.84186 2.59329 ... 2.16435 1.69897[99 rows x 22283 columns]正如我们所见,每一列都有一个名称。然后我用 VarianceThreshold 方法删除了一些列data = VarianceThreshold(0.04).fit_transform(data)print(data)print("After Variance Threshold data shape: ", data.shape)所以新数据看起来像[[4.1835 2.20952 2.41664 ... 2.21748 2.69197 2.41996] [3.82478 2.2878 1.69897 ... 1.87506 2.09691 2.35411] [4.1503 2.32015 2.35793 ... 2.01284 2.2833 2.15534] ... [3.85576 3.26694 2.71684 ... 2.68305 3.18298 2.83378] [3.25912 2.04922 2.58092 ... 2.0607 2.66932 2.42325] [3.34044 2.24551 2.60097 ... 2.03743 2.31806 2.35984]]After Variance Threshold data shape: (99, 5002)现在,数据是一个 numpy 数组,我丢失了原始数据帧中保留的每一列的标题。有没有办法让它们与熊猫/numpy?
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
您可以使用get_support获取掩码而不是结果:
In [11]: df = pd.DataFrame([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]], columns=list("ABCD"))
In [12]: df
Out[12]:
A B C D
0 0 2 0 3
1 0 1 4 3
2 0 1 1 3
In [13]: VarianceThreshold().fit(df).get_support()
Out[13]: array([False, True, True, False])
In [14]: df.loc[:, VarianceThreshold().fit(df).get_support()]
Out[14]:
B C
0 2 0
1 1 4
2 1 1
在你的例子中:
df.loc[:, VarianceThreshold(0.04).fit(data).get_support()]
添加回答
举报
0/150
提交
取消