问题描述
我正在此处编写代码以在数组中执行低方差维减少技术,当我尝试将其转换回数据框以查看已删除的列名时,它将显示数据框,其中的列名带有数字( 0,1,2等),而不是实际的列名。
这是下面的代码
任何人都可以帮助我解决此问题吗?
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_rescaled = scaler.fit_transform(Training_Data)
import plotly.express as px
column_names = Training_Data.columns
from sklearn.decomposition import PCA
pca = PCA(n_components = 0.95)
pca.fit(data_rescaled)
reduced = pca.transform(data_rescaled)
PCA_Data = pd.DataFrame(reduced)
#这是需要更改的行,以包括数据集中的列名,而不是标题0、1、2...。 pd.DataFrame(t1)
我还附上了以便更好地理解。
解决方法
fit_transform
返回类似数组的数组,而不是Pandas系列。这意味着您在执行fit_transform
时将丢失列的名称。
在对变量执行方差阈值化之前,存储列的名称。然后在重新创建数据框时将此变量传递给columns
可选参数,如下所示:
column_names = titanic_df.columns
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
t1 = sel.fit_transform(titanic_df)
# Creating the dataframe from array t1 and restoring the column names.
t1 = pd.DataFrame(t1,columns=column_names)