数据帧转换后保留标头

2024-05-15 22:11:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用sklearn和pandas处理一些微阵列,我有一个pandas数据框,每个列都命名为。所以我对数据帧做了一些转换,本质上是特征选择。你知道吗

data = pd.read_csv("data.txt")
print(data)

导致

    1007_s_at  1053_at       ...         AFFX-TrpnX-5_at  AFFX-TrpnX-M_at
0     3.96932  2.52634       ...                 2.09691          1.99123
1     4.10452  2.43457       ...                 2.28103          2.06446
2     3.95308  2.36736       ...                 2.11059          1.80618
3     3.99712  2.55388       ...                 2.13354          1.91908
4     3.95279  2.21484       ...                 2.22531          2.03342
..        ...      ...       ...                     ...              ...
96    3.79560  2.74194       ...                 2.01703          2.03743
97    3.79817  2.47422       ...                 2.12385          2.07188
98    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)

现在,data是一个numpy数组,我已经丢失了原始dataframe中剩余的每一列的头。你知道吗

有没有办法把它们和熊猫/小宝宝一起养?你知道吗


Tags: 数据pandasdatathresholdsklearn命名atprint
1条回答
网友
1楼 · 发布于 2024-05-15 22:11:49

可以使用^{}获得掩码,而不是结果:

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()]

相关问题 更多 >